将文件复制到树下,但仅复制文件而不复制目标中的目录

将文件复制到树下,但仅复制文件而不复制目标中的目录

例如我有 100 个文件夹,每个文件夹中都有 JPG 和 MOV 文件 我想将所有 jpg 复制到一个文件夹中,将所有 mov 文件复制到另一个文件夹中

例子

  • folder1one.jpgtwo.jpgone.mov

  • folder2two2.jpg和two2.mov

  • folder3xxx.jpgyyy.mov

想要的结果

  • 文件jpgfiles夹包含one.jpg two.jpg two2.jpg xxx.jpg

  • 文件movfiles夹包含one.mov two2.mov yyy.mov

答案1

您可以为此使用查找。您使用文件夹 1、文件夹 2 等上方的文件夹并在那里执行这些命令。

find /folder/ -type f -name "*.jpg" -exec cp {} "jpgfiles/" +
find /folder/ -type f -name "*.mov" -exec cp {} "movfiles/" +

/folder/这里是父文件夹。您需要将其修改为您的父文件夹。

编辑:感谢@godlygeek 指出这一点。如果您只想复制唯一文件,可以使用以下命令

find /folder/ -type f -name "*.jpg" -exec bash -c 'test ! -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test ! -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}; }' {} +

要复制具有唯一文件后缀的冲突文件:

find /folder/ -type f -name "*.jpg" -exec bash -c 'test -f jpgfiles/${0##*/} && { cp $0 jpgfiles/${0##*/}.$RANDOM; }' {} +
find /folder/ -type f -name "*.mov" -exec bash -c 'test -f movfiles/${0##*/} && { cp $0 movfiles/${0##*/}.$RANDOM; }' {} +

相关内容