批量移动文件到子文件夹(递归)

时间:2012-08-22 10:28:01

标签: shell batch-file command directory subdirectory

我有

  • 文件夹-A
    • Folder-A1(< - 其中的文件)
    • Folder-A2(< - 其中的文件)
  • 文件夹-B
    • Folder-B1(< - 其中的文件)
    • Folder-B2(< - 其中的文件)

我想得到什么

  • 文件夹-A
    • 文件夹-A1
      • Folder-A1-Subfolder(< - 移动的文件)
    • 文件夹-A2
      • Folder-A2-Subfolder(< - 移动的文件)
  • 文件夹-B
    • 文件夹-B1
      • Folder-B1-Subfolder(< - 移动的文件)
    • 文件夹-B2
      • Folder-B2-Subfolder(< - 移动的文件)

起初它看起来很复杂。但我想要做的就是将所有文件夹中的文件只移动到同一文件夹中的一个文件夹中(必须创建子文件夹,如果它包含其父文件夹的名称,那就太棒了。)

有什么办法可以用bash命令来做吗?还是应用程序? 希望你对我有一些窍门: - )

1 个答案:

答案 0 :(得分:2)

这可以在一个带有find的bash单行程中完成(这可能会使这更容易/更小,但我不是shell大师):

find . -type f -exec bash -c 'mv {} $(dirname {})/$(basename $(dirname {}))-Subfolder/$(basename {})' \;`

(查找所有非目录文件,将它们从原始位置移动到'foldername / foldername-Subfolder / filename'。这必须使用bash -c完成,因为否则将首先评估子shell)

您需要在执行命令之前创建子文件夹,这可以通过另一个查找来完成:

find . -type d ! -iname "*-Subfolder" -exec bash -c 'mkdir {}/$(basename {})-Subfolder' \;