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

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

2 つの SUSE サーバー間で DB ログ ファイルをコピーする必要があります。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 

これには大きな問題が 1 つあります。見つかったファイルの数が多すぎる場合、 は、コマンドラインの引数が無限ではないため、必要に応じてxargsコマンド (この場合はtar) を複数回呼び出します。これを回避するには、stdin からファイル名を読み取る を常に使用します。パラメータを使用して POSIX tar ファイルを取得する場合、目的の結果を得るには出力をパイプする必要があります。xargscpio--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

答え2

コマンドをチェックしてfind、tar を実行する必要のあるファイルのリストを取得できます。通常の-atime-btime-mtime... 引数を 引数と組み合わせて使用​​して、開始日と終了日 (秒単位の精度) を指定でき-notます。次に、出力を にパイプしxargs、次に にパイプします。時間引数の詳細については、tarのマニュアル ページを確認してください。find

アップデート:-mtimeAnthon が示唆したように、を使用せずに期間を指定するに は、 +/- 修飾子を使用できます-not。次に例を示します。

find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2

対応d, h, m, sする日、時間、分そしてそれぞれ、より新しく変更されたファイル5d2h3m10sとより古いファイルが表示されます。4d0h15m20s

関連情報