ファイル拡張子が.css、.htmlまたは.jsであるubuntu上のすべてのファイルをgzip圧縮しようとしています。最上位ディレクトリとすべてのサブディレクトリ。元のファイルを保持し、既存の場合は.gzファイルを上書きします。
したがって、n個のファイルがある場合、これらのn個のファイルを保持し、追加のn個のアーカイブファイルを作成したいと思います。 1つだけではありません。
私の試みは、次のようなスクリプトを実行することでした。
gzip -rkf *.css
gzip -rkf *.html
... one line for each file extension
最初に、gzipするファイル拡張子ごとに、そのスクリプトに1行が必要です。大丈夫ですが、もっと良い方法を見つけたいと思います
2番目に重要なのは、機能しないことです。 -rがジョブを実行する必要がありますが、サブディレクトリは変更されません。 gzipファイルは最上位ディレクトリにのみ作成されます。
ここに何が欠けていますか?
ところで:以下は、冗長出力のバグですよね? -kおよび-vオプションを使用する場合
-k, --keep keep (don't delete) input files
-v, --verbose verbose mode
詳細出力は、ファイルを置き換えることを示していますが、「置換」とは、置換後に元のファイルが存在しないことを意味します。とにかく、これは出力のみです。
$ ls
index.html subdir1 testfile testfile.css.gz
javaclass.Java subdir2 testfile.css
$ gzip -fkv *.css
testfile.css: 6.6% -- replaced with testfile.css.gz
$ ls
index.html subdir1 testfile testfile.css.gz
javaclass.Java subdir2 testfile.css
forループを使用してすべてのファイルを検索し、圧縮することができます。
for i in `find | grep -E "\.css$|\.html$"`; do gzip "$i" ; done
私は使うだろう
find /path/to/dir \( -name '*.css' -o -name '*.html' \) -exec gzip --verbose --keep {} \;
拡張機能を大文字と小文字を区別せずに一致させる場合は、name
をiname
に変更します(つまり、.CSS
および/または.HTML
拡張機能を含めます)。現在のディレクトリから再帰検索を開始する場合は、/path/to/dir
を省略できます。
ファイルのリストを取得するには:
find -type f | grep -P '\.js|\.html|\.css'
そして、それらすべてのファイルをgzipするには:
find -type f | grep -P '\.js|\.html|\.css' | tar cvzf archive.gz -T -
steeldriver's answer を使用しましたが、--best
および--force
オプションを使用して完成させたいと思います。
cd
を任意のフォルダーに入れ、このコードを入力します。一致するすべてのファイルがgzip圧縮されます。
find . \( -name '*.css' -o -name '*.js' \) -exec gzip --verbose --keep --best --force {} \;
--best
を使用します。--force
を使用して、gzip圧縮されたファイルがあるかどうかを確認せずに上書きします。フォルダー/サブフォルダー内のすべてのファイルを再帰的に圧縮するには:
gzip -r `find . -type f -name "*.html"`
解凍するには:
gunzip -r `find . -type f -name "*.gz"`