過去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"
フィルタリングが可能で既に使用されているのに、なぜフィルタリングを行う必要があるのか分からないので、自由に追加しましたrsync
。find