gzipを使用して、既存の.gzファイルではなくディレクトリ内のファイルを圧縮します。

gzipを使用して、既存の.gzファイルではなくディレクトリ内のファイルを圧縮します。

以下を使用して圧縮するジョブを設定するログディレクトリがあります。アーカイブ。問題は、すでに圧縮されているログを再圧縮したくないことです。

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

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

答え1

次のことができます。

gzip *

gzipは、すでに終了したファイルをスキップしていることを示します.gz
このメッセージが邪魔になった場合は、次のものを使用できます。

gzip -q *

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

ls | grep -v gz | xargs gzip

gz末尾だけでなく、ファイル名のどこからでもそのパターンを持つファイルを除外します。lsスペース、改行などを含むファイル名の場合、解析された出力が危険であることも知っておく必要があります。

gzip終わりのあるファイルをスキップすることに頼らず、.gzサブディレクトリの圧縮されていないファイルも処理するよりきれいな解決策:

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



1 説明通りizkata.gzこれを改善するために単独で使用すると機能しません。grep -vF .gzまたはを使用する必要がありますgrep -v '\.gz$'。これは依然としてls「出力」を処理するリスクを表している。

関連情報