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 |
remove --exclude='*'
|
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.
|
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 |
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 |
sorry for the late reply but I was on holiday. Still I dont seem to understand rsync.
Quote:
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. |
Quote:
--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:
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. |
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 08:49 PM. |