2016-01-06 176 views
-1

如何將目錄中的所有文件和文件夾從其子目錄移動到父目錄?在非常深的文件夾目錄中包含文件。如何將目錄中的所有文件和文件夾移動到父目錄?

我想實現的是我在.時將此轉換:

. 
./aDir 
./aDir/bFile 
./aDir/cDir 
./aDir/cDir/dDir 
./aDir/cDir/dDir/eFile 

要這樣:

. 
./aDir 
./bFile 
./cDir 
./dDir 
./eFile 

我假設你使用unix命令find不過,我可以」似乎得到它的工作。

這裏是我的嘗試:

find -mindepth 1 -maxdepth * -print0 | xargs -0 mv -i -t ~/Desktop 
+0

星號(*)是特殊的外殼。另外我發現的這個發現不會把它作爲maxdepth的值。由於缺省值'儘可能深,只要刪除'-maxdepth *'。你也要求移動文件,但指定'-type d'? –

+0

另外你還沒有找到開始目錄。 –

回答

1

既然你正在尋找非巢您的目錄你需要MV他們在深度優先順序,否則更深的目錄可以在較淺的那些內部mv'd 。

使用非常相似的語法來嘗試下面的內容似乎做了什麼需要。

find . -mindepth 2 -depth -type d -print0 | xargs -0 -I{} mv {} ~/Desktop 

實施例:

$ find . -mindepth 1 -depth -type d 
./a/b/c2 
./a/b/c 
./a/b 
./a 
$ find . -mindepth 2 -depth -type d -print0 | xargs -0 -I{} mv {} . 
$ find . -mindepth 1 -depth -type d 
./a 
./b 
./c 
./c2 
+0

我得到錯誤'mv:./a和./a是相同的,但是我確實得到了跳到父目錄的所有子目錄。但是,我沒有將目錄中的任何文件放到父目錄中。我剛剛使用'mkdir'和'touch'來創建一個類似於你的例子的目錄,但是在'a','b'&'c'目錄中有文件 – joshuatvernon

+1

@joshuatvernon如果你想把所有的文件移動到新的位置你可以簡單地從find命令中刪除'-type d'。 我編輯了答案,它應該是'-mindepth 2'以避免該錯誤 – JSCarter

1

也許這可以幫助:

for i in $(find .); do cp -r $i .; done 

當你在.其轉換這樣的:

. 
./a 
./a/b 
./a/b/c 

要這樣:

. 
./a 
./a/b 
./a/b/c 
./c 
./b 
./b/c 
1

試試這個

find . -maxdepth 1 -exec mv {} .. \; 

你可能會得到這樣的信息

mv: cannot move `.' to `../.': Device or resource busy 

不過不要擔心,這是因爲 ''這個目錄正在嘗試移動。

+1

這不是OP要求的結果。 –

+0

這將當前目錄內的所有文件和文件夾移動到一個目錄中。 – joshuatvernon

1

我想你想:

find . -mindepth 1 -depth -print0 | xargs -0 mv -i -t ~/Desktop 
+0

我收到錯誤:'mv:illegal option - t usage:mv [-f | -i | -n] [-v]源目標 mv [-f | -i | -n] [-v] source ... directory' – joshuatvernon

+0

由於他在他的例子中使用了'-t',我假設他的'mv'支持該選項......如果你的'mv'不使用這個xargs調用:'xargs -0 -I {} mv {}〜/ Desktop' –

相關問題