我需要查找目录及其子目录中的所有文件,但我需要保留目录结构。例如,有一个文件
/media/subdir1/subdir2/file.jpg
我希望将其复制到
/new-media/subdir1/subdir2/file.jpg
和/ media /目录中的所有文件相同。顺便说一句,如果不存在,必须创建/ new-media /中的目录。
如果我使用
find /media/ -name '*.jpg' -exec cp /new-media/ ????? {} \;
如何获取/ media /?
中的所有子目录答案 0 :(得分:3)
以上内容将为您提供/ media中的所有内容,但要获得您想要的内容,您可能希望使用以下内容:
方法1:根据您的要求,仅递归复制您需要的内容:
mkdir ../media2; find . -name "*.jpg" -exec cp -r --parents {} ../media2 \;
我是从你想要递归搜索的目录中运行的。它做了几件事:
1 - 创建新的目标目录
mkdir ../media2
2 - 然后查找所有以" .jpg"结尾的文件递归。
find . -name "*.jpg"
3 - 使用-exec将复制命令传递给返回的每个文件以查找匹配,并将其作为第一个参数(具有cp的语法,将成为您的源文件)中的subs:
-exec cp -r --parents {} ../media2 \;
" - 父母" flag保留现有目录结构并递归创建后续父目录。超级有用吗?
方法2:使用xargs可能有更好的方法来做到这一点,但上面最终成为最简单的方法imho。也就是说,如果你想在盒子外思考,你可以简单地复制整个目录,然后删除任何不以" .jpg"结尾的内容。有类似的东西:
cp -r media media2; find ./media '!'-name "*.jpg" -type f | xargs rm
答案 1 :(得分:1)
我认为这就是你想要的:
cp -r /media /new-media
-R,-r, - recursive
递归复制目录
希望这有帮助。