gpt4 book ai didi

bash - 使用 mv 仅将文件从多个目录递归移动到一个目录中

转载 作者:行者123 更新时间:2023-11-29 08:58:48 36 4
gpt4 key购买 nike

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

最佳答案

如果你的照片在/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 显示它在做什么(非常可选)。

mv-t选项是指定目标目录,这样我们就可以把所有要移动的文件堆叠在命令的最后(见+ -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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com