我有一个父文件夹 X ,其中包括子文件夹 X1 、 X2 和 X3 .... 这些子文件夹中的每一个都包含音乐文件。我想将这些文件移动到主文件夹 X 并删除子文件夹 X1、X2 ..etc。
我怎样才能在终端(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
这将移动所有文件。如果要将文件限制为某个集合,-name
请在第一个命令上使用(或其他)限定符find
来过滤移动的文件。