検索でRsyncを使用する

検索でRsyncを使用する

過去24時間以内に作成され、特定のファイル形式(* .png)のファイルをコピーするスクリプトを作成しようとしています。

私が試したコマンドは次のとおりです。

rsync -avz --ignore-existing --include='*.png' --exclude='*' \
 --files-from=<(ssh user@remote1 'find /home/admin/Backup/ -mtime -1 -type f -exec basename {} \;') \
  user@remote1:/home/admin/Backup/ /Repository/

これはバックアップディレクトリの* .pngファイルに対して機能しますが、ファイルが2〜3つのフォルダの深さ、つまりバックアップディレクトリ内にある場合、コマンドは失敗します/home/admin/Backup/folder1/folder2/

link_stat '/home/admin/Backup/example.png' failed: No such file or directory (2)

その理由は、basename {}結果を返すときにその位置を切り取るためですrsync。したがって、削除しようとすると、basename {}次のような結果が表示されます。

link_stat '/home/admin/Backup/home/admin/Backup/folder1/folder2/example.png' failed: No such file or directory (2)

ソースディレクトリを追加するのと同じように、rsync変更方法がわかりません。この問題を解決する方法を知っている人はいますか?それとも、私はリモートサーバーからこのファイルを間違った方法でインポートしていますか?

ベストアンサー1

man rsyncもちろん--files-from

  The  filenames  that  are read from the FILE are all relative to
  the source dir -- any leading slashes are removed  and  no  ".."
  references  are  allowed  to go higher than the source dir.  

したがって、以下を基準にパスを出力してみてくださいfind

rsync -avz ... --files-from=<(ssh user@remote1 'cd /home/admin/Backup/; find . -mtime -1 -type f -name "*.png")

またはfind /home/... ... -printf "%P\n"%P牛に似た一種の栄養find例:

ファイル名とファイルが見つかったコマンドライン引数の名前が削除されました。

-name "*.png"フィルタリングが可能で既に使用されているのに、なぜフィルタリングを行う必要があるのか​​分からないので、自由に追加しましたrsyncfind

おすすめ記事