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

use*_*496 2 tar find

我有一个包含许多日志文件的目录,文件名acct.20111001最多为acct.20111030. 我想通过运行来压缩它们:

tar -cvjf acct.20111001.bz2 acct.20111001
Run Code Online (Sandbox Code Playgroud)

如何使用find压缩它们而不是tar为每个文件运行命令?

我在想这样的事情,但我知道这个命令不起作用:

find /home/log/2011/10 -name "acct.201110[0-9]" -exec tar -cvjf {}.bz2 {} \;
Run Code Online (Sandbox Code Playgroud)

roz*_*acz 5

您使用的正则表达式与tofind范围内的所有文件都不匹配,因为您忘记了最后一个数字。如果你也可以匹配(如果它存在,我怀疑从名字的日期来看),你可以使用acct.20111001acct.20111030acct.20111000

find /home/log/2011/10 -name "acct.201110[0-3][0-9]" -exec tar -cvjf {}.bz2 {} \;
Run Code Online (Sandbox Code Playgroud)

另一种选择,尤其是当您要操作的文件很少(少于数百个)时,不要使用find,而是使用简单的for循环。然后,您可以使用范围表达式来生成零填充数字列表:

 for file in acct.201110{01..30}; do tar -cvjf $file.bz2 $file; done
Run Code Online (Sandbox Code Playgroud)

如果acct.20111001throughacct.20111030唯一以开头的文件acct.201110(我再次怀疑是这种情况),则另一个选择是可能的- 那么您可以使用acct.201110*上述任何命令。