--from-filesを使用するbashスクリプトのrsyncコマンドは、rsync:link_statエラーを発生させます。

--from-filesを使用するbashスクリプトのrsyncコマンドは、rsync:link_statエラーを発生させます。

私はしばしば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/myfilemyfile--files-from=rsync/usr/bin/rig/cachersync

あなたができることはwith-print0の代わりに使用することです。-exec basename {} \;findいっぱい\0(nul)文字で区切られた見つかったすべてのファイルへのパス。次に、--files-from=この結果を使用して、--from0nullで区切られたパス名のリストであることを指定します。

rsync次にソースパスとして使用しますadmin@rig700:

だから私はここで2つのことを提案します。

  1. レポートを区別するために使用される\0パス名find(これはただパス名に改行文字が許可されているため、Unixシステムでパス名を区切るために使用するのに安全な文字です。
  2. コピーする必要があるファイルのフルパス名を報告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--rshrsyncリモートホストがウェルカムバナーを印刷しているようです。。このバナーは混乱しているため、コマンドを実行するかrsync実行するかにかかわらず、印刷を無効にする必要があります。findrsync

要約:

  1. basename見つかったファイルを実行しないでくださいfind。代わりに、リモートシステムからフルパスを取得し--no-relativeますrsync
  2. リモートホストのウェルカムバナーが印刷されていないことを確認してください。

おすすめ記事