【发布时间】:2013-02-15 01:40:32
【问题描述】:
我有一个父文件夹 X,其中包括子文件夹 X1 、 X2 和 X3 .... 这些子文件夹中的每一个都包含音乐文件。我想将这些文件移动到主文件夹 X 并删除子文件夹 X1、X2 ..等。
如何在终端 (mac) 中执行此操作?
提前一百万,
【问题讨论】:
我有一个父文件夹 X,其中包括子文件夹 X1 、 X2 和 X3 .... 这些子文件夹中的每一个都包含音乐文件。我想将这些文件移动到主文件夹 X 并删除子文件夹 X1、X2 ..等。
如何在终端 (mac) 中执行此操作?
提前一百万,
【问题讨论】:
您可能不需要完整的脚本来执行此操作;它应该可以从命令行执行。假设您要移动的所有音乐文件都以 .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
...在这样做之前,请确保这些目录中没有任何其他内容。
更新:如果子目录没有系统命名,还有另一种方法。请注意,如果您想从父目录的所有子目录中提取文件,这只会正常工作:
for i in `ls -l | egrep '^d'| awk '{print $10}'`; do mv $i/*.mp3 .; done
【讨论】:
如果您在顶级目录中有任何文件,并且有关无法删除“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(或其他)限定符来过滤移动的文件。
【讨论】: