Unix命令以递归方式将JPG文件复制到复杂的目录树中


2

我有一个很大的目录树结构,每个目录根目录及其后续子目录中都包含多个JPG文件。我需要从每个目录根递归提取一个JPG文件,并将它们全部复制到另一个位置,同时保持相同的树结构并忽略其他文件。我需要提取的所有JPG文件名都用“ RNav.jpg”标记。我尝试了cp命令和通配符,但无法正常工作。我正在运行Mavericks,在涉及UNIX命令行时我是一个新手。

现有结构如下:(最多500个目录)

  • VNAME / PNAME1 / PNAME1_RNav.jpg
  • VNAME / PNAME2 / PNAME2_RNav.jpg
  • VNAME / PNAME3 / PNAME3_RNav.jpg
  • VNAME / PNAME4 / PNAME4_RNav.jpg

Answers:


1

您也可以使用rsync -R--relative)或--parents在GNU cp中使用:

rsync -R */*/*.RNav.jpg /path/to/target
gcp --parents */*/*RNav.jpg /path/to/target
find . -name \*RNav.jpg -exec rsync -R {} /path/to/target \;
find . -name \*RNav.jpg -exec gcp --parents {} /path/to/target \;

这一个作品!!!
user64184 2013年

3

您可以轻松地使用rsync完成此操作:

rsync --include "*/" --include "*RNav.jpg" --exclude "*" -am source destination

基于此页面。这包括文件夹和* RNav.jpg文件,然后排除其他所有内容。我使用-a而不是-r来保留更多信息(我个人喜好),并添加了-m来防止rsync创建目录树的任何不包含任何文件的部分。


格拉西亚斯!完美地工作!
user64184 2013年

经过进一步的测试后,我意识到它包括未用RNav.jpg标记的其他JPG文件。我尝试按如下所示更改通配符,但无济于事:
exclude

恩,你确定吗?我在这里没有得到那个结果。也许其他文件已存在于目标目录中?rsync不会删除它们,除非您添加--delete-excluded(要清楚,这将删除目标文件夹中的所有文件,但以RNav.jpg结尾的文件除外)。
gabedwrds 2013年

在运行命令行之前,目标目录是完全空的,因此我不确定为什么要提取和复制其他JPG文件。
user64184 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.