使用find和cp将.jpg文件从大量目录复制到一个新路径时出现问题

时间:2015-05-07 20:44:45

标签: macos bsd

我尝试了搜索,但无法找到我特定问题的答案。 当我使用时,

find / restored_files" *。jpg" -type f -exec cp {} / out \;

从/ recover_files目录中的目录复制所有.jpg文件,/ out目录从源目录中填充每个文件(jpg,txt,xml等)。 任何人都可以解释我的愚蠢在哪里,pleeeeeease ???

非常感谢,Mark。

1 个答案:

答案 0 :(得分:0)

您当前正在做的事情相当于为每个文件调用cp /dir/dir/dir/file.jpg /out,这会将文件复制到/out。因此,所有文件都被放入同一目录。

rsync允许过滤器仅选择要复制的特定文件。将fromto更改为以下相应目录:

rsync -r from/* to --include=*.jpg --filter='-! */' --prune-empty-dirs

此解决方案可归功于this post

修改:更改为rsync解决方案。原文如下:

find from -name "*.jpg" -type f -exec mkdir -p to/$(dirname {}) \; -exec cp --parents {} to \;

您应该使用适当的位置替换fromto,如果from/开头,则此表单无法正常工作。如果需要,请先cd/。此外,您最终会在to的整个目录结构下面的from内找到所有文件,但您可以将它们再次移出。