I got directories and files that look like this
/1.txt
/2.txt
/3.txt
/20170407_000000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170407_120000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170408_000000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170408_120000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170409_000000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170409_120000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170410_000000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170410_120000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170411_000000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170411_120000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170412_000000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
/20170412_120000
/config
file1.txt
/logs
file1.txt
/nav
file1.txt
/schedule
file1.txt
file2.txt
file3.txt
/soh
file1.txt
/tracks
file1.txt
I only want to copy the 20170409_*/schedule, 20170410_*/schedule, 20170411_*/schedule folders and contents.
This mostly works:
rsync -avhr --progress --include="/20170409_*/schedule/" --include="/20170410_*/schedule/" --include="/20170411_*/schedule/" --exclude="/*/*" /source/dateTimeDirectories/ /destination/dateTimeDirectories/
However this also copies the following:
1.txt 2.txt 3.txt 20170407_000000/ 20170407_120000/ 20170408_000000/ 20170408_120000/ ... 20170412_000000/ 20170412_120000/
How do I omit the files and the dateTimeFolders I haven’t included and only get the dateTimeFolder’s schedule folder that I have included?
Advertisement
Answer
If I understand the situation correctly, you need to add the option --prune-empty-dirs (in short, -m) to your command. Those directories are not matched by the exclude rule which exludes their children, so they are copied by default. -m prevents this. If you want to prevent other files to be copied, you must add specific exclude rules for them. For instance, the files 1.txt, 2.txt and so on can be excluded by --exclude=/*.txt. All in all, your command should look as follows:
rsync -avhr --progress --prune-empty-dirs --include="/20170409_*/schedule/" --include="/20170410_*/schedule/" --include="/20170411_*/schedule/" --exclude="/*.txt" --exclude="/*/*" /source/dateTimeDirectories/ /destination/dateTimeDirectories/