フォルダ内の特定のファイルをgzipする方法は?

フォルダ内の特定のファイルをgzipする方法は?

さようなら行ってください。

フォルダ内のすべての「logA」ファイルを移動し、3時間ごとにタイムスタンプを追加してから圧縮するスクリプトを作成しています。

これがスクリプトの基礎です。

cd /logs
mv *logA+timestamp /backupDIR
cd /backupDIR

--ではGZIP部分--

3時間ごとに実行されるため、.gzipファイルが/ backupDIRに既に存在することもあります。サンプル:

logA.07132020-16.00.gz
logA.07132020-19.00.gz
logA.07132020-22.00.gz
logA.07142020-02.00

スクリプトから圧縮ファイルを除外する方法は?それでも.logA + timestampがあることを確認するためにループを実行する必要がありますか?

答え1

プログラムはすでにこれを行います。以下を使用してファイルの圧縮をgzip拒否します。.gz

gzip: <file>.gz already has .gz suffix -- unchanged

したがって、すでに圧縮されているファイルを除外する必要はありません。
エラーメッセージを表示したくない場合は、を使用してくださいgzip -q

答え2

gzip実行するコマンドを提供していないので、gzip *orなどのマイナーな操作を実行していると仮定し、gzip someprefix*これはおそらくほとんどの場合うまくいくでしょう(注ユルゲンの答え.)

ただし、ディレクトリに考慮したくないファイルが多い場合(考慮するファイルはいくつかあります)できるパラメータの枯渇の問題(および/またはgzip使用するファイルを決定するときにわずかな速度低下)が発生します。

この問題を解決するにはいくつかの方法があり、そのうちの1つは次のとおりです。

find /backupDIR -type f ! -name '*.gz' -print0 | xargs -0 gzip

サブディレクトリを巡回したくない場合は、次のように修正してください。

find /backupDIR -maxdepth 1 -type f ! -name '*.gz' -print0 | xargs -0 gzip

関連情報