2013-02-15 102 views

回答

1

您可能不需要整個腳本來做到這一點;它應該可以從命令行執行。假設您想要移動的所有音樂文件都以.mp3結尾,而其他所有文件(不想移動的文件)都不會移動。如果是這種情況,可以使用cd進入目錄X,然後運行:

mv X1/*.mp3 . 

...等等的其他兩個子目錄。
或者,如果你想要做的所有文件在同一時間,你可以這樣做:

i=0; while [ $i -lt 3 ]; do i=$(($i + 1)); mv X$i/*.mp3 .; done 

在後「-lt」的數量是要提取的文件最終目錄後綴從。

當您完成後,您可以使用

rmdir X1 

刪除的目錄,如果他們是空的,或者

rm -r X1 

如果他們不。您還可以構建成一個班輪上面是這樣的:

i=0; while [ $i -lt 3 ]; do i=$(($i + 1)); mv X$i/*.mp3 .; rm -r X$i; done 

...只要確保沒有任何東西在你想保持在這樣做之前的目錄。

UPDATE:如果子目錄沒有系統地命名,還有另一種方法。請注意,這隻會不出現錯誤的工作,如果你想從父目錄中所有子目錄的文件解壓:

for i in `ls -l | egrep '^d'| awk '{print $10}'`; do mv $i/*.mp3 .; done 
+0

偉大的,但子文件不僅三個他們很多(約100),他們沒有命名X1 X2等......無論如何做不同的命名子目錄?感謝您提前回答。 – 2013-02-15 15:00:04

+0

查看上面的更新。它現在將查找X的所有子目錄,而不管名稱如何,並從這些目錄中提取以.mp3結尾的所有文件。 – 2013-02-15 15:11:52

0

下,如果你有在頂級目錄和一個錯誤的文件會發出一些錯誤信息有關無法刪除「X」,但他們可以放心地忽略:

find X -type f -exec mv {} X \; # Move all files into X 
find X -depth -type d -exec rmdir {} \; # Remove all subdirectories of X 

這將移動所有文件。如果要將文件限制到某個特定集合,請在第一個find命令上使用-name(或其他)限定符來過濾移動的文件。

相關問題