特定のパターンでファイルを圧縮するには、/bin/gzip を使用します。

特定のパターンでファイルを圧縮するには、/bin/gzip を使用します。

特定のモードでファイルを個別に圧縮したいです。たとえば、次のようなディレクトリがあります。

/log/log1
    -/1/log2/file.1
    -/1/log2/file123
    -/1/log2/file2.1
/log/log2
    -/2/log2/file4.1
    -/2/log2/file345
    -/2/log2/file3.1

/logで、拡張子が.1のすべてのファイルを繰り返し圧縮したいと思います。

結果は次のとおりです。

/log/log1
    -/1/log2/file.gz
    -/1/log2/file123
    -/1/log2/file2.gz
/log/log2
    -/2/log2/file4.gz
    -/2/log2/file345
    -/2/log2/file3.gz

答え1

find+bash解決策:

find /log -type f -name "*.1" -exec bash -c 'gzip -nc "$1" > "${1:0:-2}.gz"; rm "$1"' _ {} \;

gzipオプション:

  • -n- 圧縮時にデフォルトでは、元のファイル名とタイムスタンプは保存されません。
  • -c- 出力を標準出力に書き込みます。ソースファイルは変更されません。

${1:0:-2}bash-の一部;最後の 2 文字が切り捨てられたファイルパスを取得します。

答え2

次のことができます。

find /log -name '*.1' -type f -exec sh -c '
  for file do
    gzip "$file" && mv -i "$file.gz" "${file%.*}.gz"
  done' sh {} +

私たちは、いくつかのメタデータを圧縮ファイルに保存し、競合をよりよく処理する機能の利点を得るためにgzip file && mv -i file.gz newfilevs.を使用します。gzip < file > newfile && rm -f filegzipmv -i

関連情報