web-dev-qa-db-ja.com

検索してrsync?

14日と10kを超えてファイルを検索し、見つかったファイルを宛先にrsyncしたい。

これら2つのコマンドを組み合わせる方法はありますか?

find ./ -mtime +14 -size +10k 
rsync --remove-sent-files -avz /src /dest
24
mkrouse

以下に概説するオプションのいずれかを使用して、findの出力をrsyncに送信できます。

方法#1

これらの2つのオプションは非常によく似ています。どちらも、ディレクトリを特定の場所に変更し、そこからfindコマンドを実行することを前提としています。

$ rsync -avz --remove-sent-files \
        --files-from=<(find ./ -mtime +14 -size +10k) ./ /dest

パイプを使用してリストをフィードすることもできます。

$ find ./ -mtime +14 -size +10k -print0 \
        | rsync -av --files-from=- --from0 ./ /dest

方法#2

このメソッドはどこからでも実行できます。

$ find /src/dir/ -mtime +14 -size +10k -printf %P\\0 \
        | rsync --files-from=- --from0 /src/dir/ /dst/dir/
  • printf %P:ファイルの名前と削除されたコマンドライン引数の名前。この方法では、任意のsrcディレクトリを使用できます。最初にsrcディレクトリにcdする必要はありません。

参考文献

36
slm