如何在保持完整目录结构的同时将“特定扩展名”(从目录)移动到新位置?

时间:2015-04-21 03:34:37

标签: shell ubuntu

我有以下目录结构

/home/dir1/abc.jpg 
/home/dir1/abc.pdf
/home/dir1/dir2/abc.jpg 
/home/dir1/dir2/abc1.jpg 
/home/dir1/dir2/dir3/abc.jpg

我希望将jpg文件从它们复制到一个具有相同目录结构的新文件夹,例如:

/home/newdir1/abc.jpg 
/home/newdir1/dir2/abc.jpg 
/home/newdir1/dir2/abc1.jpg 
/home/newdir1/dir2/dir3/abc.jpg

如何实现使用rsync或任何其他软件?

请帮助,非常感谢!!

2 个答案:

答案 0 :(得分:0)

根据您在问题中所包含的内容,您可能会尝试以下几种方法。

您已指定要移动"文件。这意味着您要么使用mv命令,要么使用rsync' --remove-source-files选项。例如:

mv /source1/* /source2/* /path/to/targetdir/

rsync -a /source1/ /source2/ /path/to/targetdir/

毫无疑问,您已经阅读了rsync手册页中的部分内容,该部分解释了源尾部有无斜尾的差异。如果没有,请阅读,因为它很重要。

如果你的成千上万的源文件[有]相似的名字"需要在源目录中匹配,留下一些其他文件,你需要确定你的"相似的名字"可以使用路径名扩展进行区分,或者是否应使用正则表达式。如果是前者,那么使用mvrsync将路径名扩展添加到您的来源就足够了。如果您需要使用正则表达式,那么find可能是更好的选择:

find /source1/ /source2/ -regex ".*/file[A-F][0-9][0-9].txt" -exec mv "{}" /targetdir/ \;

如果这些问题无法解决问题,那么您需要在问题中提供更多详细信息。

答案 1 :(得分:0)

我会尝试像这样的小shell脚本:

#!/bin/sh
cd /home/dir1
JPEGS=`find . -name "*.jpg"`
tar cf - $JPEGS | (cd /home/newdir1 ; tar xf -)

首先获取所有jpg文件的列表以及它们的相对路径,然后将它们的tar文件写入管道,并将其更改为新目录,然后从其stdin中提取tar。