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 <wa...@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.. >
-- Please use reply-all for most replies to avoid omitting the mailing list. To unsubscribe or change options: https://lists.samba.org/mailman/listinfo/rsync Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html