我想知道如何使用 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]