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

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

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*上記のコマンドのいずれかを使用できます。

おすすめ記事