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