我有一个包含许多日志文件的目录,文件名最多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
to范围内的所有文件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)。这将从标准输入获取文件列表并生成存档。如果您需要生成 tar 格式的存档,请使用该-H tar
选项。