根据模式压缩多个文件

根据模式压缩多个文件

我想知道如何使用 gzip、tar 等根据模式压缩几个文件...也就是说,如果我有这些文件:

server_regTCA.log.2021.02.12
server_regTCA.log.2021.02.13
server_regTCA.log.2021.02.14
server_regTCA.log.2021.02.15
server_regTCA.log.2021.02.16
server_regTCA.log.2021.02.17
server_regTCA.log.2021.02.18

我想做类似的事情gzip -9 server_regTCA.log.2021.02.[12-15]

谢谢

答案1

您还没有提到您正在使用什么外壳,这就是控制模式扩展的外壳。

如果您正在使用,bash则可以使用大括号扩展:

gzip server_regTCA.log.2021.02.{12..15}

如果您使用的是更简单的 shell,例如sh没有大括号扩展的 shell,则您只能匹配单字符模式:

gzip server_regTCA.log.2021.02.1[2-5]

在这两种情况下,您都可以为命令添加前缀,以echo查看 shell 如何扩展模式,而无需实际执行gzip.

如果您想压缩“较旧”的文件,可能有更好的方法。例如,这将压缩与一年多(366 天)前最后更改的列出文件名形状匹配的所有(未压缩)文件:

find ... -type f -mtime +365 -name 'server_regTCA.log.????.??.??' -exec gzip {} +

(每个都?匹配一个字符。压缩文件具有.gz与模式不匹配的后缀。)

答案2

zsh

gzip -9 -- *.log.2021.02.<12-15>

或者gzip任意日期范围内的文件:

start=2021.01.31 end=2022.03.28
gzip -9 -- *.log.*(^e['[[ ${REPLY##*.log.} < $start || ${REPLY##*.log.} > $end ]]'])

(假设所有*.log.*文件都有该-style 后缀。如果没有,您可以使用例如YYYY-MM-DD使匹配更明确)。*.log.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]

相关内容