【问题标题】:Move files based on directory name (Linux / Debian / #!)根据目录名移动文件(Linux / Debian / #!)
【发布时间】:2013-09-03 03:42:00
【问题描述】:

问题:

如何将多个同名子目录中的文件移动到同名的单个目录中。多个名为 X 的目录中的所有文件应一起移动到一个名为 X 的目录中。

示例文件结构:

(实际结构是 200-300 个目录,在我标记为 1、2、3 等的级别上,下面的目录数量不等。)

(请注意,所有像 Group _ 这样的标签都只是--标签。实际名称是不规则的。)

  • 磁盘

    • 1

        • 音乐
          • A组
            • 文件
            • 文件
            • 文件
          • B 组
            • 文件
            • 文件
            • 文件
    • 2

      • 图书馆
        • 音乐
          • B 组
            • 文件
            • 文件
            • 文件
          • C组
            • 文件
            • 文件
            • 文件
    • 3
      • 图书馆
        • 音乐
          • C组
            • 文件
            • 文件
            • 文件
          • D组
            • 文件
            • 文件
            • 文件

目标是将名称为“Group X”的各个子目录中的文件移动到名称为“Group X”的单个目录中,如下所示:

  • 磁盘
    • 1
      • 图书馆
        • 音乐
          • A组
            • 文件
            • 文件
            • 文件
          • B 组
            • 文件
            • 文件
            • 文件
            • 文件
            • 文件
            • 文件
          • C组
            • 文件
            • 文件
            • 文件
            • 文件
            • 文件
            • 文件
          • D组
            • 文件
            • 文件
            • 文件

谢谢!

【问题讨论】:

  • 如果这会导致单个目录中出现大量数字(取决于内核参数,我现在不知道它的名称),您可能会遇到麻烦。您可能会用完 inode。也可能存在性能问题。
  • cp -r /disk2/Library /disk3/Library /disk1 有什么问题?
  • 我只需要处理 ~2000-3000 个文件和大约 1/10 的文件夹。 (我认为这也回答了评论 2!)
  • 让我提供一些颜色可能有助于人们沉迷于此:文件是 mp3。它们曾经位于大约 200 个目录中,名称基于“艺术家 - 专辑”,但文件系统变得混乱,以至于一些“艺术家 - 专辑”文件夹被拆分,因此只有一部分 mp3 在里面,其余部分在相邻目录中的同名文件夹中。除此之外,它们都位于按流派排序的父目录中,这些父目录同样被分成多个相邻的同名目录。
  • 所以我想在正确命名的目录和流派父目录中恢复 mp3 文件的正确顺序。哇!希望这是有道理的。

标签: linux file sorting subdirectory


【解决方案1】:

你会做这样的事情:

dest="Group A"
find -type f | 
grep $dest | 
while read filename
do     
    echo mv $filename ${dest}/$(basename $filename)
done

【讨论】:

  • 我不能根据文件名做任何事情,只有目录名。此外,还有数千个“X 组”文件需要重新排序,因此任何基于唯一目录名称(如 A 组)的东西都不可行。可以对其进行修改以达到此目的吗?恐怕你写的东西我不太明白。谢谢!
  • "Group X" 是目录吗?你可以做类似for dest in find -type d | grep "Group" 的事情,然后把所有东西都放在那个循环中。
  • 抱歉 hendry,我使用“Group _”标签作为占位符。除了我在原始问题的 cmets 中描述的名称之外,这些名称实际上并不规则。
  • 所以你不能grep Group?也许你可以告诉 find 找到深度为 3 的目录?
  • 再次感谢您的帮助!我认为 grep 在这里不会有帮助。我想我们必须从最低的子目录开始,然后问,文件结构中是否有同名的目录?是的?将包含的文件移动到该目录。删除空目录。移动到下一个目录。再问一下,有没有同名的目录?是的?移动文件。删除空。一旦它在给定级别用完目录,它应该移动到目录的父级别并执行相同的查找/移动/删除空,除了子目录现在也必须移动......跨度>
猜你喜欢
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 2012-04-26
  • 2016-03-21
相关资源
最近更新 更多