Linux - Software This forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum. |
Notices |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
|
|
03-04-2009, 09:06 AM
|
#1
|
LQ Newbie
Registered: Mar 2009
Posts: 4
Rep:
|
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
|
|
|
03-04-2009, 09:29 AM
|
#2
|
Member
Registered: Oct 2008
Location: Online
Distribution: RHEL, Centos
Posts: 373
Rep:
|
remove --exclude='*'
|
|
|
03-04-2009, 09:37 AM
|
#3
|
LQ Newbie
Registered: Mar 2009
Posts: 4
Original Poster
Rep:
|
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.
|
|
|
03-04-2009, 10:38 AM
|
#4
|
LQ Newbie
Registered: Mar 2009
Posts: 4
Original Poster
Rep:
|
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
Last edited by ehlers; 03-04-2009 at 10:42 AM.
|
|
|
03-04-2009, 10:58 AM
|
#5
|
Member
Registered: Oct 2008
Location: Online
Distribution: RHEL, Centos
Posts: 373
Rep:
|
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
Last edited by chitambira; 03-04-2009 at 11:03 AM.
|
|
|
03-09-2009, 04:46 AM
|
#6
|
LQ Newbie
Registered: Mar 2009
Posts: 4
Original Poster
Rep:
|
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.
Last edited by ehlers; 03-09-2009 at 04:51 AM.
|
|
|
03-11-2009, 08:15 AM
|
#7
|
Member
Registered: Oct 2008
Location: Online
Distribution: RHEL, Centos
Posts: 373
Rep:
|
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.
|
|
|
03-11-2009, 09:53 AM
|
#8
|
Bash Guru
Registered: Jun 2004
Location: Osaka, Japan
Distribution: Arch + Xfce
Posts: 6,852
|
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 04:30 PM.
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|