使用 find 和 cp 将 .jpg 文件从很多目录复制到一个新路径时出现问题
Problems using find and cp to copy just .jpg files from a LOT of directories to one new path
我试过搜索,但找不到我的具体问题的答案。
当我使用时,
find /recovered_files "*.jpg" -type f -exec cp {} /out \;
要从 /recovered_files 目录中的目录复制所有 .jpg 文件,/out 目录会填充源中的每个文件(jpg、txt、xml 等)目录。
谁能解释一下我的愚蠢之处,pleeeeeeease???
非常感谢,马克。
你现在所做的相当于为每个文件调用cp /dir/dir/dir/file.jpg /out
,这会将文件复制到/out
。因此,所有文件都放在同一个目录中。
rsync
允许过滤器 select 仅复制某些文件。将 from
和 to
更改为以下相应目录:
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 \;
您应该将 from
和 to
替换为适当的位置,如果 from
以 /
开头,则此表单将无法正常工作。如果需要,只需先 cd
到 /
。此外,您最终会在 from
的整个目录结构下看到 to
中的所有文件,但您可以将它们再次移出。
我试过搜索,但找不到我的具体问题的答案。 当我使用时,
find /recovered_files "*.jpg" -type f -exec cp {} /out \;
要从 /recovered_files 目录中的目录复制所有 .jpg 文件,/out 目录会填充源中的每个文件(jpg、txt、xml 等)目录。 谁能解释一下我的愚蠢之处,pleeeeeeease???
非常感谢,马克。
你现在所做的相当于为每个文件调用cp /dir/dir/dir/file.jpg /out
,这会将文件复制到/out
。因此,所有文件都放在同一个目录中。
rsync
允许过滤器 select 仅复制某些文件。将 from
和 to
更改为以下相应目录:
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 \;
您应该将 from
和 to
替换为适当的位置,如果 from
以 /
开头,则此表单将无法正常工作。如果需要,只需先 cd
到 /
。此外,您最终会在 from
的整个目录结构下看到 to
中的所有文件,但您可以将它们再次移出。