
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-10
2013 年 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 ファイルを取得する場合、目的の結果を得るには出力をパイプする必要があります。xargs
cpio
--format=ustar
gzip
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
アップデート:-mtime
Anthon が示唆したように、を使用せずに期間を指定するに は、 +/- 修飾子を使用できます-not
。次に例を示します。
find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2
対応d, h, m, s
する日、時間、分そして秒それぞれ、より新しく変更されたファイル5d2h3m10s
とより古いファイルが表示されます。4d0h15m20s