rsync prints "skipping non-regular file" for what appears to be a regular directory

I back up my files using rsync. Right after a sync, I ran it expecting to see nothing, but instead it looked like it was skipping directories. I've (obviously) changed names, but I believe I've still captured all the information I could. What's happening here?

$ ls -l /source/backup/myfiles drwxr-xr-x 2 me me 4096 2010-10-03 14:00 foo drwxr-xr-x 2 me me 4096 2011-08-03 23:49 bar drwxr-xr-x 2 me me 4096 2011-08-18 18:58 baz $ ls -l /destination/backup/myfiles drwxr-xr-x 2 me me 4096 2010-10-03 14:00 foo drwxr-xr-x 2 me me 4096 2011-08-03 23:49 bar drwxr-xr-x 2 me me 4096 2011-08-18 18:58 baz $ file /source/backup/myfiles/foo /source/backup/myfiles/foo/: directory 

Then I sync (expecting no changes):

$ rsync -rtvp /source/backup /destination sending incremental file list backup/myfiles skipping non-regular file "backup/myfiles/foo" skipping non-regular file "backup/myfiles/bar" 

And here's the weird part:

$ echo 'hi' > /source/backup/myfiles/foo/test $ rsync -rtvp /source/backup /destination sending incremental file list backup/myfiles backup/myfiles/foo backup/myfiles/foo/test skipping non-regular file "backup/myfiles/foo" skipping non-regular file "backup/myfiles/bar" 

So it worked:

$ ls -l /source/backup/myfiles/foo -rw-r--r-- 1 me me 3126091 2010-06-15 22:22 IMGP1856.JPG -rw-r--r-- 1 me me 3473038 2010-06-15 22:30 P1010615.JPG -rw-r--r-- 1 me me 3 2011-08-24 13:53 test $ ls -l /destination/backup/myfiles/foo -rw-r--r-- 1 me me 3126091 2010-06-15 22:22 IMGP1856.JPG -rw-r--r-- 1 me me 3473038 2010-06-15 22:30 P1010615.JPG -rw-r--r-- 1 me me 3 2011-08-24 13:53 test 

but still:

$ rsync -rtvp /source/backup /destination sending incremental file list backup/myfiles skipping non-regular file "backup/myfiles/foo" skipping non-regular file "backup/myfiles/bar" 

Other notes:

My actual directories "foo" and "bar" do have spaces, but no other strange characters. Other directories have spaces and have no problem. I 'stat'-ed and saw no differences between the directories that don't rsync and the ones that do.

If you need more information, just ask.

6 Answers

Are you absolutely sure those individual files are not symbolic links?

Rsync has a few useful flags such as -l which will "copy symlinks as symlinks". Adding -l to your command:

rsync -rtvpl /source/backup /destination 

I believe symlinks are skipped by default because they can be a security risk. Check the man page or --help for more info on this:

rsync --help | grep link 

To verify these are symbolic links or pro-actively to find symbolic links you can use file or find:

$ file /path/to/file /path/to/file: symbolic link to `/path/file` $ find /path -type l /path/to/file 
2

Are you absolutely sure that it's not a symbolic link directory?

try a:

file /source/backup/myfiles/foo 

to make sure it's a directory

Also, it could very well be a loopback mount try

mount 

and make sure that /source/backup/myfiles/foo is not listed.

1

You should try the below command, most probably it will work for you:

rsync -ravz /source/backup /destination 

You can try the following, it will work

rsync -rtvp /source/backup /destination 
1

I personally always use this syntax in my script and works a treat to backup the entire system (skipping sys/* & proc/* nfs4/*)

sudo rsync --delete --stats --exclude-from $EXCLUDE -rlptgoDv / $TARGET/ | tee -a $LOG 

Here is my script run by root's cron daily:

#!/bin/bash # NFS="/nfs4" HOSTNAME=`hostname` TIMESTAMP=`date "+%Y%m%d_%H%M%S"` EXCLUDE="/home/gcclinux/Backups/root-rsync.excludes" TARGET="${NFS}/${HOSTNAME}/SYS" LOGDIR="${NFS}/${HOSTNAME}/SYS-LOG" CMD=`/usr/bin/stat -f -L -c %T ${NFS}` ## CHECK IF NFS IS MOUNTED... if [[ ! $CMD == "nfs" ]];then echo "NFS NOT MOUNTED" exit 1 fi ## CHECK IF LOG DIRECTORY EXIST if [ ! -d "$LOGDIR" ]; then /bin/mkdir -p $LOGDIR fi ## CREATE LOG HEADER LOG=$LOGDIR/"rsync_result."$TIMESTAMP".txt" echo "-------------------------------------------------------" | tee -a $LOG echo `date` | tee -a $LOG echo "" | tee -a $LOG ## START RUNNING BACKUP /usr/bin/rsync --delete --stats --exclude-from $EXCLUDE -rlptgoDv / $TARGET/ | tee -a $LOG 

In some cases just copy file to another location (like home) then try again

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like