既存の .gz ファイルを除くディレクトリ内のファイルを gzip で圧縮します。

既存の .gz ファイルを除くディレクトリ内のファイルを gzip で圧縮します。

ログのディレクトリがあり、それを圧縮するジョブを設定したいのですが圧縮問題は、すでに圧縮したログを再圧縮したくないということです。

を使ってみましたls | grep -v gz | gzipが、うまくいかないようです。

これを実行する方法はありますか? 基本的には、ディレクトリ内の .gz で終わらないすべてのファイルを gzip で圧縮したいのです。

答え1

次のようにすればいいだけです:

gzip *

gzip は、すでに末尾があるファイルをスキップすることを通知します.gz
このメッセージが邪魔になる場合は、次の方法を使用できます。

gzip -q *

試したことは機能しませんでした。gzip圧縮するファイルのファイル名を標準入力から読み取らないためです。これを機能させるには、以下を使用する必要があります。

ls | grep -v gz | xargs gzip

ファイル名の末尾だけでなく、ファイル名の任意の場所にパターンがあるファイルを除外します。¹gzまた、スペースや改行などが含まれるファイル名がある場合、出力の解析は危険であることにも注意する必要がありますls

gzip末尾が isのファイルをスキップすることに頼らず.gz、サブディレクトリ内の非圧縮ファイルも処理する、よりクリーンなソリューションは次のとおりです。

find .  -type f ! -name "*.gz" -exec gzip {} \;



¹コメントされているようにizkata.gzこれを改善するために を単独で使用しても機能しません。grep -vF .gzまたは を使用する必要がありますgrep -v '\.gz$'。それでも、ls出力を処理する危険性が残ります。

関連情報