パターンに基づいて複数のファイルを圧縮する

パターンに基づいて複数のファイルを圧縮する

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}

中かっこ拡張のない単純なシェルを使用している場合は、単一のsh文字パターンのみを一致させることができます。

gzip server_regTCA.log.2021.02.1[2-5]

どちらの場合も、コマンドの前にプレフィックスを付けるechoことで、実際に実行せずにシェルがパターンを拡張する方法を確認できますgzip

「古い」ファイルを圧縮したい場合は、より良い方法があるかもしれません。たとえば、以下は、1年(366日)以上前に最後に変更されたリストされたファイル名の外観に一致するすべての(圧縮されていない)ファイルを圧縮します。

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

(それぞれ?1文字に一致します。圧縮ファイルには.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]

関連情報