特定の日付の間にファイルをscp / tarにする方法は?

特定の日付の間にファイルをscp / tarにする方法は?

2つのSuseサーバー間でデータベースログファイルをコピーする必要があります。 2013年3月10日から2013年3月13日までのファイルにのみ興味があります。

ファイルをコピーする前に圧縮する必要があるため、tarとscpを使用してください。現在、私はtar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-102013年3月10日から現在までのすべてのファイルを提供するためにこれを使用しています。しかし、すべて必要ではありません。 tarスイッチが見つかりませんでした。

ベストアンサー1

Bichoyが指摘したように、このfindコマンドを使用すると、特定のアクセス、作成、および変更時間を持つファイルを見つけることができます。ただし、-mtimeは24時間単位でオフセットされ、特定の「日」の前に何かをしたくない限り、計算するのは必ずしも便利ではありません。-daystartこれを一日の初めに「丸め」と組み合わせる必要があります。

あなたの場合、より便利なのは、日付文字列を使用する-newermtオプションだと思います(ほとんどの-newerXYバージョンなどの参照ファイル名の代わりに)

find-print0名前にスペースが含まれているファイルを処理し、オプションで興味のある-type f期間にディレクトリをインポートしないオプションとそれを組み合わせます。

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | xargs -0 tar -cvzf /tmp/saas_archive_logs.tar.gz 

これには大きな問題があります。見つかったファイルの数が長すぎると、xargsそのコマンドは無制限ではなく、コマンドラインの引数に対応するために必要なだけ(この場合)呼び出されます。これを防ぐために、私は常に標準入力からファイル名を読み取るを使用します。引数を使用してPOSIX tarファイルを取得します。必要な結果を得るには、出力をパイプする必要があります。tarxargscpio--format=ustargzip

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | cpio --create --null  --format=ustar \
   | gzip > /tmp/saas_archive_logs.tar.gz

おすすめ記事