【问题标题】:writing a script in terminal to move files from sub folders to a parent folder在终端中编写脚本以将文件从子文件夹移动到父文件夹
【发布时间】:2013-02-15 01:40:32
【问题描述】:

我有一个父文件夹 X,其中包括子文件夹 X1 、 X2 和 X3 .... 这些子文件夹中的每一个都包含音乐文件。我想将这些文件移动到主文件夹 X 并删除子文件夹 X1、X2 ..等。

如何在终端 (mac) 中执行此操作?

提前一百万,

【问题讨论】:

    标签: macos unix terminal


    【解决方案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
    

    ...在这样做之前,请确保这些目录中没有任何其他内容。

    更新:如果子目录没有系统命名,还有另一种方法。请注意,如果您想从父目录的所有子目录中提取文件,这只会正常工作:

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

    【讨论】:

    • 很好,但子文件不仅是三个,而且很多(大约 100 个),而且它们没有命名为 X1 X2 等......无论如何要为不同的命名子目录做这件事?感谢您提前回答。
    • 见上面的更新。它现在将查找 X 的所有子目录,无论名称如何,并从这些目录中提取所有以 .mp3 结尾的文件。
    【解决方案2】:

    如果您在顶级目录中有任何文件,并且有关无法删除“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(或其他)限定符来过滤移动的文件。

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 1970-01-01
      • 2013-05-11
      • 2018-10-16
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多