ログのディレクトリがあり、それを圧縮するジョブを設定したいのですが圧縮問題は、すでに圧縮したログを再圧縮したくないということです。
を使ってみました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
出力を処理する危険性が残ります。