我目前在嵌套目录结构中有约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
显示其正在执行的操作(非常可选)。-t
的mv
选项用于指定目标目录,以便我们可以在命令末尾堆叠所有要移动的文件(请参阅+
的-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/