GNU/Linux >> Linux の 問題 >  >> Linux

すべてのファイルを削除せずにgzipする

find . -type f | \
while read -r x
do
  gzip -c "$x" > "$x.gz"
done

-c 結果を stdout にプッシュし、オリジナルだけを保持します。欠点は、自分でファイルを見つける必要があることです。より洗練されたトラバースについては、 find(1) を使用できます ただし、上記のように:. 現在のディレクトリから始まる検索、および -type f すべての通常ファイルの名前を返します。


find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;

圧縮したいものを含めるように簡単に切り替えることができます ( -name '*.txt -or -name '*.html など) 一部のファイル (既に圧縮された、バックアップおよび一時ファイル) を除外します。

ファイル名のスペースも適切に処理します。

gzip を変更 echo gzip まで テスト用。または、-exec 部分をすべてスキップします。

編集: あ、言い忘れましたが、これは <target>.gz かどうかをチェックしません。 もう存在している。これは問題になる場合とそうでない場合があります。

編集 2: わかりました、ここで既存のファイルをチェックするものに行きます。それが望まれる場合。ワンライネスを許してください。

while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz";  fi  done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))

私の find -foo は、本来あるべきものではないかもしれません。find で直接スキップできる可能性は非常に高いでしょう。


gzip -k オプション

gzip 1.6 (2013 年 6 月) は -k, --keep を追加しました オプションで、次のことができるようになりました:

gzip -kr .

元のファイルは削除されません。

https://unix.stackexchange.com/questions/46786/how-to-tell-gzip-to-keep-original-file にあります


Linux
  1. Linux ですべてのスパース ファイルを見つける方法

  2. Linux ですべてまたは特定のファイルを gzip する方法

  3. Linuxですべてのシリアルデバイス(ttyS、ttyUSBなど)を開かずに見つける方法は?

  1. 特定のサイズを超えるファイルをすべて取得して削除する方法

  2. Linuxで.rbで終わるすべてのファイルを見つける方法は?

  3. ファイルを検索して tar (スペースを含む)

  1. bash のすべてのサブディレクトリにあるすべてのファイルを gzip する方法

  2. 文字列を含む名前のすべてのファイルを検索

  3. ディレクトリおよびサブディレクトリ内のすべてのゼロバイト ファイルを検索する