2015-11-02 70 views
0

我发现了许多脚本,它们将以递归方式平整目录中子文件夹和子文件夹的子文件夹的所有内容。但我只想平坦一层,并保持子文件夹完好无损。我怎么会这样做可能是一个bash脚本?如何平铺终端命令中的单个目录级别?

+0

请定义你认为“扁平”意思是 – Alnitak

回答

2
mv */* . 

如果你不关心隐藏目录,它是那样简单。

+0

将'。[!。] *'和'..?*'球体添加到该文件中,并且您可以获得所有内容。 –

0

这个怎么样?

array=($(ls)) 
for i in "${array[@]}" 
do 
    echo $i 
    if [ -d $i ]; then 
     cd $i 
     ls 
     cd .. 
    fi 
done 

让您获得每个第一级子目录的ls输出以及顶级的所有内容。

+2

[为什么你不应该解析ls(1)]的输出(http://mywiki.wooledge.org/ParsingLs)。 'array =(*)'会更好。 –

2
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