【问题标题】:Batch move files into subfolders (recursively)将文件批量移动到子文件夹中(递归)
【发布时间】:2012-08-22 10:28:00
【问题描述】:

我有

  • 文件夹-A
    • 文件夹-A1(
    • 文件夹-A2(
  • 文件夹-B
    • 文件夹-B1(
    • 文件夹-B2(

我想得到什么

  • 文件夹-A
    • 文件夹-A1
      • Folder-A1-Subfolder(
    • 文件夹-A2
      • Folder-A2-Subfolder(
  • 文件夹-B
    • 文件夹-B1
      • Folder-B1-Subfolder(
    • 文件夹-b2
      • Folder-B2-Subfolder(

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

有什么方法可以用 bash 命令来完成吗?还是一个应用程序? 希望你能给我一些建议:-)

【问题讨论】:

    标签: shell batch-file command directory subdirectory


    【解决方案1】:

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

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

    (查找所有非目录文件,将它们从原始位置移动到“文件夹名/文件夹名-子文件夹/文件名”。这必须使用bash -c 完成,否则会首先评估子shell)

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

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

    【讨论】:

    • 你好!我稍后会在家里试试。再次感谢!
    • 对我来说效果很好 :-) “创建子文件夹”命令的末尾有一个 ',我必须将其删除才能工作。它也为 Folder-A 和 Folder-B 创建了一个子文件夹,但这不是问题,因为这个级别只有 29 个文件夹,所以我可以手动删除它们。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2015-09-28
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多