2015-11-02 69 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