特定のモードでファイルを個別に圧縮したいです。たとえば、次のようなディレクトリがあります。
/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 文字が切り捨てられたファイルパスを取得します。