web-dev-qa-db-ja.com

特定の拡張子を持つすべてのファイルをgzipします

ファイル拡張子が.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
11
Sadik

forループを使用してすべてのファイルを検索し、圧縮することができます。

for i in `find | grep -E "\.css$|\.html$"`; do gzip "$i" ; done
7
mndo

私は使うだろう

find /path/to/dir \( -name '*.css' -o -name '*.html' \) -exec gzip --verbose --keep {} \;

拡張機能を大文字と小文字を区別せずに一致させる場合は、nameinameに変更します(つまり、.CSSおよび/または.HTML拡張機能を含めます)。現在のディレクトリから再帰検索を開始する場合は、/path/to/dirを省略できます。

13
steeldriver

ファイルのリストを取得するには:

find -type f | grep -P '\.js|\.html|\.css'

そして、それらすべてのファイルをgzipするには:

find -type f | grep -P '\.js|\.html|\.css' | tar cvzf archive.gz -T -
4
chaos

steeldriver's answer を使用しましたが、--bestおよび--forceオプションを使用して完成させたいと思います。

cdを任意のフォルダーに入れ、このコードを入力します。一致するすべてのファイルがgzip圧縮されます。

find . \( -name '*.css' -o -name '*.js' \) -exec gzip --verbose --keep --best --force {} \;
  • 最適な圧縮率を得るには、--bestを使用します。
  • --forceを使用して、gzip圧縮されたファイルがあるかどうかを確認せずに上書きします。
2
azerafati

フォルダー/サブフォルダー内のすべてのファイルを再帰的に圧縮するには:

gzip -r `find . -type f -name "*.html"` 

解凍するには:

gunzip -r `find . -type f -name "*.gz"` 
0
Naruto_Hokage