如何解决在 ZSH 中展平/压缩深度嵌套的目录
我正在处理很多 Java 项目,Java 中的一个标准是具有以下目录结构:
▶ tree src
src
├── androidTest
│ └── java
│ └── com
│ └── mypackage
│ └── example
│ └── ExampleInstrumentedTest.kt
├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ └── mypackage
│ │ └── example
│ │ └── MainActivity.kt
│ └── res
│
│
└── test
└── java
└── com
└── mypackage
└── example
└── ExampleUnitTest.kt
使用命令行处理它真的很痛苦,因此,大多数 IDE 都有一个“扁平化功能”来将目录显示为 com.mypackage.example
而不是 com > mypackage > example
。 Even GitHub has this feature。
有没有办法将一些像这样的深层嵌套目录显示为一层深度,以便可以使用 cd com.mypackage.example
而不是 cd java/com/mypackage/example
访问它,并返回 cd ..
而不是 { {1}} ?
我发现 this reddit post 可能很有用,但在我试用后并没有解决我的问题
解决方法
您可以在 const path = require("path")
const TerserPlugin = require("terser-webpack-plugin")
let isProduction = process.env.NODE_ENV === "production"
const { CleanWebpackPlugin } = require("clean-webpack-plugin")
module.exports = {
entry: {
"MyProject": "./src/index.js",},output: {
path: path.resolve(__dirname,"dist"),filename: isProduction ? "[name].min.js" : "[name].js",plugins: [new CleanWebpackPlugin()],mode: isProduction ? "production" : "development",module: {
rules: [{
test: /.js$/,exclude: /(node_modules)/,use: {
loader: "babel-loader",options: {
plugins: ["@babel/plugin-transform-modules-commonjs"],{
test: /.css$/i,use: [
{ loader: "style-loader",options: { injectType: "linkTag" } },"file-loader",],...(isProduction ? {} : { devtool: "eval-source-map" }),optimization: {
minimize: true,minimizer: [new TerserPlugin()],}
周围放置一个包装函数,如下所示:
cd
您可以按如下方式使用它:
cd() {
# If we don't have exactly one argument that is a valid dir...
if ! [[ $# -eq 1 && -d $PWD/$1 ]]; then
# ...then just use the default behavior.
builtin cd "$@"
return
fi
# Get the absolute path of where normal `cd <arg1>` would take us.
local dir=${${:-$PWD/$1}:A}
# List the children of that dir.
local -a children=( $dir/* )
if [[ $1 == '..' ]]; then
# Keep going up until we find a dir with more than one child.
while [[ $#dir -gt 1 && $#children -eq 1 ]]; do
dir=$dir:h
children=( $dir/* )
done
else
# Keep going down as long as we find exactly one child and it's a dir.
while [[ $#children -eq 1 && -d $children ]]; do
dir=$children
children=( $dir/* )
done
fi
# Pass the resulting path to `cd`.
builtin cd $dir
}
最后,如果您想要源代码树的平面文件列表,请使用:
% pwd
/[...]/src/main
% ls
java/ res/
% cd java
% pwd
/[...]/src/main/java/com/mypackage/example
% cd ..
% pwd
/[...]/src/main
-
% print -lo **(T^F) src/androidTest/java/com/mypackage/example/ExampleInstrumentedTest.kt src/main/java/com/mypackage/example/MainActivity.kt src/main/res/ src/test/java/com/mypackage/example/ExampleUnitTest.kt
在单独的行中列出每个项目。 -
print -l
按升序对项目进行排序。 -
print -o
进行递归通配。 -
**
添加文件类型标记((T)
表示目录,/
表示符号链接等) -
@
匹配任何除了带有子目录的目录(“完整”目录)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。