如何在bash中以递归方式将同名文件从一个目录结构复制到另一个目录结构?

时间:2014-06-04 18:29:14

标签: bash awk sed

我有两个目录,比如dir1dir2,它们具有完全相同的目录结构。如何以递归方式将所有*.txt文件从dir1复制到dir2

示例:

我想从

复制
dir1/subdir1/file.txt
dir1/subdir2/someFile.txt
dir1/.../..../anotherFile.txt

dir2/subdir1/file.txt
dir2/subdir2/someFile.txt
dir2/.../..../anotherFile.txt

最后一个文件示例中的.../...表示这可以是任何子目录,它本身可以有子目录。

我想再次以编程方式执行此操作。这是伪代码

SRC=dir1
DST=dir2
for f in `find ./$SRC "*.txt"`; do
   # $f should now be dir1/subdir1/file.txt
   # I want to copy it to dir2/subdir1/file.txt
   # the next line coveys the idea, but does not work
   # I'm attempting to substitute "dir1" with "dir2" in $f,
   # and store the new path in tmp.txt
   echo `sed -i "s/$SRC/$DST/" $f` > tmp.txt
   # Do the copy
   cp -f $f `cat tmp.txt`
done

2 个答案:

答案 0 :(得分:3)

您只需使用rsync即可。此答案基于此thread

rsync -av --include='*.txt' --include='*/' --exclude='*' dir1/ dir2/

答案 1 :(得分:0)

如果您在dir1中只有.txt个文件,则可以使用:

cp -R dir1/* dir2/

但是如果你有其他文件扩展名,它也会复制它们。在这种情况下,这将起作用:

cd /path/to/dir1
cp --parents `find . -name '*.txt'` path/to/dir2/