web-dev-qa-db-ja.com

rsyncは、通常のディレクトリのように見えるものに対して「非正規のファイルをスキップ」を出力します

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を実行しないディレクトリと実行を実行するディレクトリの間に違いは見られませんでした。

さらに情報が必要な場合は、お問い合わせください。

31
Richard

これらの個々のfilesがシンボリックリンクではないことは確かですか?

Rsyncには、「シンボリックリンクをシンボリックリンクとしてコピーする」-lなどの便利なフラグがいくつかあります。 -lをコマンドに追加:

rsync -rtvpl /source/backup /destination

シンボリックリンクはセキュリティリスクになる可能性があるため、デフォルトではスキップされます。詳細については、manページまたは--helpを確認してください。

rsync --help | grep link

これらがシンボリックリンクであることを確認するため、または事前にシンボリックリンクを見つけるためにfileまたはfindを使用できます。

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

シンボリックリンクディレクトリではないことを確信していますか?

試してください:

file /source/backup/myfiles/foo

それがディレクトリであることを確認する

また、それは非常によくループバックマウントの試みである可能性があります

mount

/ source/backup/myfiles/fooがリストされていないことを確認してください。

4
Gauthic

以下のコマンドを試す必要があります。ほとんどの場合、うまくいくでしょう:

rsync -ravz /source/backup /destination
1
mSatyam

以下を試すことができます、それは動作します

rsync -rtvp /source/backup /destination
0
Premjith

私は個人的にスクリプトでこの構文を常に使用しており、服装システムをバックアップするために扱います(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
gcclinux