2013-02-15 138 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(或其他)限定符来过滤移动的文件。

相关问题