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


8

10.3.2013-13.3.2013の間でのみファイルに関心がある2つのsuseサーバー間でdbログファイルをコピーする必要があります

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

回答:


12

Bichoyが示したように、このfindコマンドを使用して、特定のアクセス権を持つファイルを検索し、作成および変更時間を指定できます。ただし、-mtimeは24時間単位でオフセットを取得し、特定の「日」前の数から何かが必要な場合を除いて、計算に常に便利であるとは限りません。-daystartそれを1日の初めに「丸める」と組み合わせる必要があります。

私はあなたの場合より便利だと思います-datestringをとる-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)が複数回呼び出されxargsます。cpiostdinからファイル名を読み取るを常に使用することを回避します。では--format=ustar、パラメータPOSIX tarファイルを取得し、そしてを通して、あなたの場合には、あなたは、パイプへの出力が必要になり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

コードを使用するときに時間と分を指定できますか?
Radek 2013

コメントを投稿する前に試しましたが、「検索:「201302050000」を日付または時刻として解釈する方法がわかりません」
Radek

@Radek短い答えははいです。スペースを処理する必要がないため、YYYYMMDDThhmmを使用します。長い答え:man findが教えてくれます:時間指定は、GNU dateの-dオプションへの引数と同様に解釈され、man dateで見つけます... a mostly free format human readable date string ..... A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers
Anthon

エラーを指摘してくれて@Radekに感謝します。コメントを編集できなかったためT、日と時間の間に挿入された新しいコメントを再挿入しました。私がテストして動作したこと。どういうわけかfind。私はその日は秒間のドットを(必要だろうと思ったことはなく、YYYYMMDDHHMMのYYMMDDHHMMSS可能性があり、おそらくので(そうでない場合は文字列を分割する方法を知りません.ss)それが唯一の日付を設定するための、おそらくです。
Anthonの

4

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

更新: Anthonが示唆したように、+ /-修飾子を使用して、-mtimeを使用せずに期間を指定できます-not。次に例を示します。

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

どこd, h, m, sに相当する日数、時間、分、および秒でそれぞれ。これにより、変更されたファイルがより新しい、より5d2h3m10s古い4d0h15m20s


2
への引数-mtimeは日数でのオフセットでなければなりませんが、実行時間の間にオフセットが固定されている場合を除き、常にそうであるとは限りません。-notを使用する代わりに、-mtime +Xand -mtime -Xを使用して、X日前の前後を指定することもできます。
Anthon、2013

絶対的な日付と時刻を指定する構文は何ですか?
Radek 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.