查找列出具有日期模式的所有文件,将它们打包在一起

查找列出具有日期模式的所有文件,将它们打包在一起

我有一个包含许多日志文件的目录,文件名最多acct.20111001acct.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.20111001to范围内的所有文件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

就像是

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

应该可以工作(也许有一个更好的全局来捕捉所有的日子),但你的问题听起来像logrotate或者新系统日志是你可能需要的。

答案3

您需要的工具是CPIO(1)。这将从标准输入获取文件列表并生成存档。如果您需要生成 tar 格式的存档,请使用该-H tar选项。

相关内容