私はしばしばrsync:link stat error
ディレクトリが存在しないと言い、コマンドで指定された時間より短い代わりに、リモートサーバーフォルダ内のすべてのファイルをコピーしますfind
。間隔の問題か、bash
かっこを解釈する方法がわからない。時にはうまくいくかもしれません。
注文する:
rsync --no-perms --ignore-existing -vt --files-from=<(ssh admin@rig700 'find /usr/bin/rig/cache -mmin -720 -type f -exec basename {} \;') admin@rig700:/usr/bin/rig/cache /usr/bin/rig/store
答え1
のサブディレクトリにある場合でも、見つかっbasename
たすべてのファイルを明示的に呼び出します。これは、同様のファイルがとして報告されることを意味します。このファイルは明らかに存在しないので、それについて苦情を申し上げたいと思います。find
/usr/bin/rig/cache
/usr/bin/rig/cache/subdir/myfile
myfile
--files-from=
rsync
/usr/bin/rig/cache
rsync
あなたができることはwith-print0
の代わりに使用することです。-exec basename {} \;
find
いっぱい\0
(nul)文字で区切られた見つかったすべてのファイルへのパス。次に、--files-from=
この結果を使用して、--from0
nullで区切られたパス名のリストであることを指定します。
rsync
次にソースパスとして使用しますadmin@rig700:
。
だから私はここで2つのことを提案します。
- レポートを区別するために使用される
\0
パス名find
(これはただパス名に改行文字が許可されているため、Unixシステムでパス名を区切るために使用するのに安全な文字です。 - コピーする必要があるファイルのフルパス名を報告
find
し、これらのパスをそのままrsync
。
最後に、あなたの命令は
rsync -e 'ssh -q' --no-perms --ignore-existing -vt \
--from0 --files-from=<(
ssh -q admin@rig700 'find /usr/bin/rig/cache -mmin -720 -type f -print0'
) --no-relative admin@rig700: /usr/bin/rig/store
--no-relative
--no-R
読み取るパス名を--files-from
絶対パス名として扱うには、(or)オプションが必要です。このオプションがないと、/usr/bin/rig/cache/somefile.txt
パス名の最初の文字(たとえば)が/
削除され、リモートホストのホームディレクトリに相対的になります。
また、()オプションを使用してリモートシステムでコマンドを実行しssh -q
ました。私がこれをする理由はfind
-e
--rsh
rsync
リモートホストがウェルカムバナーを印刷しているようです。。このバナーは混乱しているため、コマンドを実行するかrsync
実行するかにかかわらず、印刷を無効にする必要があります。find
rsync
要約:
basename
見つかったファイルを実行しないでくださいfind
。代わりに、リモートシステムからフルパスを取得し--no-relative
ますrsync
。- リモートホストのウェルカムバナーが印刷されていないことを確認してください。