Bash 如何在终端命令中展平一级目录?

Bash 如何在终端命令中展平一级目录?,bash,unix,Bash,Unix,我发现了很多脚本,它们可以递归地展平目录子文件夹及其子文件夹的所有内容。但我只想展平一层并保持子文件夹完好无损。我该如何使用bash脚本来实现这一点呢?这个怎么样 array=($(ls)) for i in "${array[@]}" do echo $i if [ -d $i ]; then cd $i ls cd .. fi done 获取每个第一级细分曲面的ls输出,以及从顶层开始的所有内容。这个怎么样 array

我发现了很多脚本,它们可以递归地展平目录子文件夹及其子文件夹的所有内容。但我只想展平一层并保持子文件夹完好无损。我该如何使用bash脚本来实现这一点呢?

这个怎么样

array=($(ls))
for i in "${array[@]}"
do
    echo $i
    if [ -d $i ]; then
        cd $i
        ls
        cd ..
    fi
done
获取每个第一级细分曲面的ls输出,以及从顶层开始的所有内容。

这个怎么样

array=($(ls))
for i in "${array[@]}"
do
    echo $i
    if [ -d $i ]; then
        cd $i
        ls
        cd ..
    fi
done
mkdir -p dir0/dir1/dirA/dirX
mkdir -p dir0/dir2/dirB/dirY
mkdir -p dir0/dir3/dirC/dirZ
获取每个第一级细分曲面的ls输出,以及从顶层开始的所有内容

mkdir -p dir0/dir1/dirA/dirX
mkdir -p dir0/dir2/dirB/dirY
mkdir -p dir0/dir3/dirC/dirZ
让我们看看现在的情况:

tree dir0
返回:

dir0/
├── dir1
│   └── dirA
│       └── dirX
├── dir2
│   └── dirB
│       └── dirY
└── dir3
    └── dirC
        └── dirZ
现在让我们跑吧

find dir0 -mindepth 2 -maxdepth 2 -exec mv -i '{}' dir0 ';'
让我们看看dir0现在是什么样子:

tree dir0
结果:

dir0
├── dir1
├── dir2
├── dir3
├── dirA
│   └── dirX
├── dirB
│   └── dirY
└── dirC
    └── dirZ
Ps:您也可以运行类似以下内容:

 mv dir0/*/* dir0
让我们看看现在的情况:

tree dir0
返回:

dir0/
├── dir1
│   └── dirA
│       └── dirX
├── dir2
│   └── dirB
│       └── dirY
└── dir3
    └── dirC
        └── dirZ
现在让我们跑吧

find dir0 -mindepth 2 -maxdepth 2 -exec mv -i '{}' dir0 ';'
让我们看看dir0现在是什么样子:

tree dir0
结果:

dir0
├── dir1
├── dir2
├── dir3
├── dirA
│   └── dirX
├── dirB
│   └── dirY
└── dirC
    └── dirZ
Ps:您也可以运行类似以下内容:

 mv dir0/*/* dir0
如果你不关心隐藏目录,就这么简单


如果你不关心隐藏目录,就这么简单。

请定义你认为的“扁平化”的含义请定义你认为的“扁平化”的含义<代码>数组=(*)会更好<代码>数组=(*)会更好。将
[!.]*
。?*
全局添加到该数组中,您将获得所有内容。将
[!.]*
全局添加到该数组中,您将获得所有内容。