LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (http://www.linuxquestions.org/questions/linux-software-2/)
-   -   Sync files not folders with rsync (non recursive) (http://www.linuxquestions.org/questions/linux-software-2/sync-files-not-folders-with-rsync-non-recursive-709125/)

ehlers 03-04-2009 09:06 AM

Sync files not folders with rsync (non recursive)
 
Hello,

okay this sounds really easy but I am having serious problems finding an anwser to this.

I want to sync *.htm and *.html between SOURCE AND DESTINATION. *.htm and
*.html which are not present in DESTINATION to be copied and *.htm and
*.html which are not present in SOURCE to be deleted in DESTINATION. I dont want rsync to touch any folders or their content.

The closest I have gotten is this command:

/usr/bin/rsync -dolptgvze --delete --include='*.htm' --include='*.html' --exclude='*' /SOURCE/ /DESTINATION/

But if I have a /DESTINATION/test.htm file and its not in /SOURCE/ it is not deleted. Of course I want this to happen.

Thanks for your help

ke

chitambira 03-04-2009 09:29 AM

remove --exclude='*'

ehlers 03-04-2009 09:37 AM

Thanks, but this is not helping at all. If I remove --exclude='*' then ALL files AND folders are synced (files with suffix != html oder htm) and still the test.htm from DESTINATION which is not in SOURCE is not deleted.

ehlers 03-04-2009 10:38 AM

I got it working like this:

/usr/bin/rsync -ndolptgvze --delete-excluded --delete --include='*.htm' --include='*.html' --exclude='*' /S/ /D/

Can somebody please explain why this is such a big difference to

/usr/bin/rsync -ndolptgvze --delete --delete-excluded --include='*.htm' --include='*.html' --exclude='*' /S/ /D/

If I change the ordering of --delete and --delete-excluded everything in subfolders is deleted

chitambira 03-04-2009 10:58 AM

I meant to say, if you use --delete, then you DO NOT have to use --exclude='*', BUT if you use --exclude='*', and --delete-excluded, then you DO NOT have to use --delete to achieve what you want.

In your first case only --delete is being used.
In the second case (working) --delete-excluded is the one now being used hence its combination with --exclude='*' is providing you the functionality that you want, thus deleting all other files on the DST.

Note that --delete acts on the SRC side and --delete-excluded acts on the DST side

ehlers 03-09-2009 04:46 AM

sorry for the late reply but I was on holiday. Still I dont seem to understand rsync.

Quote:

I meant to say, if you use --delete, then you DO NOT have to use --exclude='*', BUT if you use --exclude='*', and --delete-excluded, then you DO NOT have to use --delete to achieve what you want.
I need to use --exclude='*' even when not applying --delete-excluded because if I not use --exclude='*' then rsync deletes stuff on the reciever which I do not want to have deleted.

Sender:

folder: source\
a.htm
b.htm
c.htm
d.htm

Reciever:

folder: destination\
files\folderA\abc.pdf
files\folderA\abcd.pdf
files\folderA\abce.pdf
a.htm
b.htm
c.htm
y.html

Now if I do:

/usr/bin/rsync -ndolptgvze "/usr/bin/ssh -i /var/lib/wwwrun/.ssh/id_dsa" --delete --include='*.htm' --include='*.html' /source/ /destination/

then folder files on destination is deleted (which I dont want)

If I use:

/usr/bin/rsync -ndolptgvze "/usr/bin/ssh -i /var/lib/wwwrun/.ssh/id_dsa" --delete --include='*.htm' --include='*.html' --exclude='*' /source/ /destination/

files folder on destination is not deleted but y.html on reciever is not deleted either.

The solution I found erlier is only working if the reciver path is on the same host so I am back to 0 here. The problem still remains. How do I sync *.htm and *.html files in a folder w/o rsync touching anything else in that folder.

chitambira 03-11-2009 08:15 AM

Quote:

/usr/bin/rsync -ndolptgvze "/usr/bin/ssh -i /var/lib/wwwrun/.ssh/id_dsa" --delete --include='*.htm' --include='*.html' /source/ /destination/

then folder files on destination is deleted (which I dont want)
Remember!!!
--delete will delete files that donīt exist on the sending side, so when ever you specify it, be sure to delete some files on the /DST/ if they are not there in /SRC/

Quote:

If I use:

/usr/bin/rsync -ndolptgvze "/usr/bin/ssh -i /var/lib/wwwrun/.ssh/id_dsa" --delete --include='*.htm' --include='*.html' --exclude='*' /source/ /destination/

files folder on destination is not deleted but y.html on reciever is not deleted either.
In this case you are conflicting --delete and --exclude, and of course --exclude="*" wins, so --delete is not being used. y.html is not deleted because there nothing telling rsync to delete it.

Try:
/usr/bin/rsync -ndolptgvze "/usr/bin/ssh -i /var/lib/wwwrun/.ssh/id_dsa" --include='*.htm' --include='*.html' --delete-excluded /source/ /destination/

What you are trying to achieve may not be provided by rsync.

David the H. 03-11-2009 09:53 AM

You might want to take a look at unison. I'm not sure if it can do exactly what you want ('cause I'm still not clear myself on exactly what you want), but think it has a better chance than rsync.


All times are GMT -5. The time now is 11:24 PM.