日付パターンとしてリストされているすべてのファイルを見つけて一緒にまとめます。

日付パターンとしてリストされているすべてのファイルを見つけて一緒にまとめます。

acct.20111001最大ファイル名を持つ多くのログファイルを含むディレクトリがありますacct.20111030。以下を実行して圧縮したいと思います。

tar -cvjf acct.20111001.bz2 acct.20111001

各ファイルに対してコマンドを実行せずにどのようにfind圧縮できますか?tar

私はこのようなことを考えていましたが、このコマンドが機能しないことを知っています。

find /home/log/2011/10 -name "acct.201110[0-9]" -exec tar -cvjf {}.bz2 {} \;

答え1

使用している正規表現は、範囲内のすべてのファイルfindと一致しません。acct.20111001acct.20111030最後の数字を忘れてしまった。あなたも一致することができればacct.20111000(存在する場合は名前の日付の形で疑わしいです)、次のものを使用できます

find /home/log/2011/10 -name "acct.201110[0-3][0-9]" -exec tar -cvjf {}.bz2 {} \;

別のオプションは、特に作業するファイルがほとんどない場合(数百未満)、find簡単な方法を代わりに使用することです。forループに変更します。その後利用できます範囲表現これにより、ゼロで埋められた数値のリストが生成されます。

 for file in acct.201110{01..30}; do tar -cvjf $file.bz2 $file; done

acct.20111001合格した場合は、acct.20111030可能な他のオプションがあります。次に始まる唯一のファイルacct.201110(やはりこれが本当かどうか疑わしいです。) - これで、acct.201110*上記のコマンドのいずれかを使用できます。

答え2

それはまるで

for file in acct.201110[0-9]; do tar -cvjf $file.bz2 $file; done

うまくいきますが、おそらく一日中キャプチャできるより良いグローバルビューがあるかもしれませんが、質問は次のとおりです。logrotateまたは新しいシステムログあなたが必要かもしれません。

答え3

必要なツールは次のとおりです。CPIO(1)。これにより、標準入力からファイルのリストが取得され、アーカイブが生成されます。-H tartar形式でアーカイブを作成する必要がある場合は、このオプションを使用してください。

関連情報