我目前在嵌套目录结构中有约40k RAW图像。 (有些文件夹最多有100个子文件夹,其中充满了文件。)我想将它们全部移到一个主目录中,而没有子文件夹。如何使用mv完成此操作?我知道-r开关将递归复制,但这也会复制文件夹,并且我不希望master文件夹中有子目录。

最佳答案

如果您的照片位于/path/to/photos/及其子目录中,并且您想移动至/path/to/master/,并且希望通过扩展名.jpg.JPG.png.PNG等进行选择:

find /path/to/photos \( -iname '*.jpg' -o -iname '*.png' \) -type f -exec mv -nv -t '/path/to/master' -- {} +

如果您不想按扩展名过滤,只需移动所有内容(即所有文件)即可:
find /path/to/photos -type f -exec mv -nv -t '/path/to/master' -- {} +
-n选项不会覆盖现有文件(如果您不在乎,则是可选的),而-v选项则是mv显示其正在执行的操作(非常可选)。
-tmv选项用于指定目标目录,以便我们可以在命令末尾堆叠所有要移动的文件(请参阅+-exec分隔符)。如果您的mv不支持-t:
find /path/to/photos \( -iname '*.jpg' -o -iname '*.png' \) -type f -exec mv -nv -- {} '/path/to/master' \;

但这会降低效率,因为将为每个文件创建一个mv实例。

顺便说一句,这将移动文件,但不会复制它们。

备注。
  • 目录/path/to/master必须已经存在(此命令不会创建)。
  • 确保目录/path/to/master不在/path/to/photos中。这会使事情变得尴尬!
  • 关于bash - 使用mv仅将文件从多个目录递归移动到一个目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19880246/

    10-14 17:04
    查看更多