rsync печатает «пропуск нестандартного файла» для того, что выглядит как обычный каталог - PullRequest
31 голосов
/ 24 августа 2011

Я создаю резервную копию своих файлов, используя rsync.Сразу после синхронизации я запустил его, ожидая ничего не видеть, но вместо этого показалось, что он пропускает каталоги.Я (очевидно) изменил имена, но я верю, что все еще собрал всю информацию, которую мог.Что здесь происходит?

$ 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

Затем я синхронизирую (не ожидая изменений):

$ 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"

И вот странная часть:

$ 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"

Так это сработало:

$ 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

но все же:

$ 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"

Другие примечания:

В моих реальных каталогах "foo" и "bar" есть пробелы,но никаких других странных персонажей.Другие каталоги имеют пробелы и не имеют проблем.Я написал статистику и не увидел различий между каталогами, которые не поддерживают rsync, и теми, которые делают.

Если вам нужна дополнительная информация, просто спросите.

Ответы [ 5 ]

42 голосов
/ 14 августа 2013

Вы абсолютно уверены, что эти отдельные файлы не являются символическими ссылками?

В Rsync есть несколько полезных флагов, таких как -l, которые будут "копировать символические ссылки как символические ссылки".Добавление -l к вашей команде:

rsync -rtvpl /source/backup /destination

Я считаю, что символические ссылки по умолчанию пропускаются, поскольку они могут представлять угрозу безопасности.Обратитесь к странице справки или --help для получения дополнительной информации по этому вопросу:

rsync --help | grep link

Чтобы убедиться, что это символические ссылки или вы можете активно искать символические ссылки, вы можете использовать file или найти :

$ file /path/to/file
/path/to/file: symbolic link to `/path/file`
$ find /path -type l
/path/to/file
4 голосов
/ 24 августа 2011

Вы абсолютно уверены, что это не каталог символьных ссылок?

попробуйте:

file /source/backup/myfiles/foo

чтобы убедиться, что это каталог

Кроме того, это вполне может быть петлевое крепление попробовать

mount

и убедитесь, что / source / backup / myfiles / foo не указан.

1 голос
/ 27 июня 2014

Вам следует попробовать приведенную ниже команду, скорее всего, она будет работать для вас:

rsync -ravz /source/backup /destination
0 голосов
/ 14 июня 2018

Лично я всегда использую этот синтаксис в своем скрипте и создаю для резервного копирования внутреннюю систему (пропуская sys / * & proc / * nfs4 / *)

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

Вот мой скрипт, запускаемый root'омcron ежедневно:

#!/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
0 голосов
/ 03 января 2014

Вы можете попробовать следующее, это будет работать

rsync -rtvp /source/backup /destination
...