递归查找并复制到其他目录

时间:2017-01-19 22:13:50

标签: linux find copy

我需要查找目录及其子目录中的所有文件,但我需要保留目录结构。例如,有一个文件

/media/subdir1/subdir2/file.jpg

我希望将其复制到

/new-media/subdir1/subdir2/file.jpg

和/ media /目录中的所有文件相同。顺便说一句,如果不存在,必须创建/ new-media /中的目录。

如果我使用

find /media/ -name '*.jpg' -exec cp /new-media/ ????? {} \;

如何获取/ media /?

中的所有子目录

2 个答案:

答案 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
        递归复制目录

希望这有帮助。