I would like to sync many subdirectories into one directory with no subdirectories. I've tried rsync -rv --progress --include '*.jp*g' --include '*.png' --include '*.dng' --include '*.raw' --include '*.nef' --include 'Duo' --include 'DCIM' --include 'WhatsApp' --exclude '*' /my/phone/root/dir/ /my/backup/directory/for/images/ I'd like to do this w/o separate rsync commands such as rsync -rv --progress --include '*.jp*g' --include '*.png' --include '*.dng' --include '*.raw' --include '*.nef' --exclude '*' /my/phone/root/dir/DCIM /my/backup/directory/for/images/ rsync -rv --progress --include '*.jp*g' --include '*.png' --include '*.dng' --include '*.raw' --include '*.nef' --exclude '*' /my/phone/root/dir/Duo /my/backup/directory/for/images/ rsync -rv --progress --include '*.jp*g' --include '*.png' --include '*.dng' --include '*.raw' --include '*.nef' --exclude '*' /my/phone/root/dir/WhatsApp /my/backup/directory/for/images/ -- This has subdirectories rsync -rv --progress --include '*.jp*g' --include '*.png' --include '*.dng' --include '*.raw' --include '*.nef' --exclude '*' /my/phone/root/dir/NewDir /my/backup/directory/for/images/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When you are principled, set standards and stick to them some people will fall out of your life; let them! -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.samba.org/pipermail/rsync/attachments/20200929/ebd4d4b5/attachment.htm>
On Tue, Sep 29, 2020 at 7:38 AM Rob Campbell wrote:> I would like to sync many subdirectories into one directory with no > subdirectories. I've tried > > rsync -rv --progress --include '*.jp*g' --include '*.png' --include > '*.dng' --include '*.raw' --include '*.nef' --include 'Duo' --include > 'DCIM' --include 'WhatsApp' --exclude '*' /my/phone/root/dir/ > /my/backup/directory/for/images/ >You didn't specify what isn't working as you expect. That command works fine for the 3 listed dir names as long as you either don't have matching files inside /my/phone/root/dir (or as long as it's ok to also copy those files) and as long as there aren't subdirs or files named the same as the 3 top dirs you included. The latter can be fixed by anchoring your dir names and making them only match a dir (e.g. --include '/Duo/'). If you want to have the copy avoid files in the top dir you can either change all the file-based includes to have a "*/" prefix (such as "--include '*/*.png' ...") or you can change the dir includes into args and exclude '*/*' instead of "*". The last option would look like this (I also tossed in -i): rsync -riv --progress --include '*.jp*g' --include '*.png' --include '*.dng' --include '*.raw' --include '*.nef' --exclude '*/*' /my/phone/root/dir/{Duo,DCIM,WhatsApp} /my/backup/directory/for/images/ That assumes you've got bash to do the brace expansion, but you could change that into 3 arg paths if you need to. You may also want to add --del if you want rsync to delete inside the 3 listed dirs. I'm not sure why you listed an extra command with "NewDir" when it's not mentioned in the first command. If that is an indication that you really want to copy all dirs under root/dir (not just the 3 named dirs in the first command) then you could use an include of "/*/" to match any dir in the root of the transfer, like this: rsync -riv --progress --include '*.jp*g' --include '*.png' --include '*.dng' --include '*.raw' --include '*.nef' --include '/*/' --exclude '*' /my/phone/root/dir/ /my/backup/directory/for/images/ One last suggestion, I like to make the args shorter by using -f (filter) commands, so an include example is -f '+ *.png' and an exclude example is -f '- /*/' (those are identical to the equivalent include/exclude args, so that's just personal preference). ..wayne.. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.samba.org/pipermail/rsync/attachments/20200929/7938595f/attachment.htm>
Thanks for your help. What you provided didn't work for me because that still placed things in subdirectories. I figured it out. This puts it all in the images directory. find /my/phone/root/dir/ \( -path '*Duo*' -o -path '*DCIM*' -o -path '*Pictures*' -o -path '*Camera*' -o -path "*Download*" -o -path "*textgram*" -o -path "*WhatsApp*" ! -path '*.textgram*' ! -path '*.thumbnails*' \) -type f \( -iname '*.jp*g' -o -iname '*.png' -o -iname '*.dng' -o -iname '*.raw' -o -iname '*.raw' \) -exec rsync -uz --progress "{}" /my/backup/directory/for/images/ \; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When you are principled, set standards and stick to them some people will fall out of your life; let them! On Tue, Sep 29, 2020 at 1:33 PM Wayne Davison <wayne at opencoder.net> wrote:> On Tue, Sep 29, 2020 at 7:38 AM Rob Campbell wrote: > >> I would like to sync many subdirectories into one directory with no >> subdirectories. I've tried >> >> rsync -rv --progress --include '*.jp*g' --include '*.png' --include >> '*.dng' --include '*.raw' --include '*.nef' --include 'Duo' --include >> 'DCIM' --include 'WhatsApp' --exclude '*' /my/phone/root/dir/ >> /my/backup/directory/for/images/ >> > > You didn't specify what isn't working as you expect. That command works > fine for the 3 listed dir names as long as you either don't have matching > files inside /my/phone/root/dir (or as long as it's ok to also copy those > files) and as long as there aren't subdirs or files named the same as the 3 > top dirs you included. The latter can be fixed by anchoring your dir names > and making them only match a dir (e.g. --include '/Duo/'). If you want to > have the copy avoid files in the top dir you can either change all the > file-based includes to have a "*/" prefix (such as "--include '*/*.png' > ...") or you can change the dir includes into args and exclude '*/*' > instead of "*". The last option would look like this (I also tossed in -i): > > rsync -riv --progress --include '*.jp*g' --include '*.png' --include > '*.dng' --include '*.raw' --include '*.nef' --exclude '*/*' > /my/phone/root/dir/{Duo,DCIM,WhatsApp} /my/backup/directory/for/images/ > > That assumes you've got bash to do the brace expansion, but you could > change that into 3 arg paths if you need to. You may also want to add --del > if you want rsync to delete inside the 3 listed dirs. > > I'm not sure why you listed an extra command with "NewDir" when it's not > mentioned in the first command. If that is an indication that you really > want to copy all dirs under root/dir (not just the 3 named dirs in the > first command) then you could use an include of "/*/" to match any dir in > the root of the transfer, like this: > > rsync -riv --progress --include '*.jp*g' --include '*.png' --include > '*.dng' --include '*.raw' --include '*.nef' --include '/*/' --exclude '*' > /my/phone/root/dir/ /my/backup/directory/for/images/ > > One last suggestion, I like to make the args shorter by using -f (filter) > commands, so an include example is -f '+ *.png' and an exclude example is > -f '- /*/' (those are identical to the equivalent include/exclude args, so > that's just personal preference). > > ..wayne.. >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.samba.org/pipermail/rsync/attachments/20200929/0591040d/attachment.htm>