简体   繁体   中英

How can I recursively copy same-named files from one directory structure to another in bash?

I have two directories, say dir1 and dir2 , that have exactly the same directory structure. How do I recursively copy all the *.txt files from dir1 to dir2 ?

Example:

I want to copy from

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

to

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

The .../... in the last file example means this could be any sub-directory, which can have sub-directories itself.

Again I want to do this programmatically. Here's the pseudo-code

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

You can simply use rsync . This answer is based from this thread .

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

If you only have .txt files in dir1, this would work:

cp -R dir1/* dir2/

But if you have other file extensions, it will copy them too. In this case, this will work:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM