web-dev-qa-db-ja.com

unixでフォルダツリー全体をzipしますが、特定のファイルのみをzipするにはどうすればよいですか?

私は小さなUNIXコマンドラインの問題で立ち往生しています。

コピーを取得する必要があるウェブサイトフォルダー(4gb)がありますが、.php、.html、.js、および.cssファイル(わずか数百kb)のみを取得します。

私は理想的には、フォルダ全体をZipまたはtarする方法がありますが、サブフォルダ構造を保持しながら特定のファイル拡張子のみを取得する方法があると考えています。これは可能ですか?もし可能なら、どのように?

Zip全体を実行してから特定のファイルを除外してみましたが、少し過剰に思えました。

私はちょっとUNIXを始めたばかりです。

どんなアイデアでも大歓迎です。

43
willdanceforfun

Webサイトフォルダーに切り替えて、実行します

Zip -R foo '*.php' '*.html' '*.js' '*.css' 

Webサイトフォルダーの外部からこれを実行することもできます。

Zip -r foo website_folder -i '*.php' '*.html' '*.js' '*.css'
65
Curtis Tasker

findgrepを使用してファイルリストを生成し、それをZipにパイプすることができます。

例えば.

find . | egrep "\.(html|css|js|php)$" | Zip -@ test.Zip

-@は、Zipにstdinからファイルリストを読み込むように指示します)

20
Nick

これは私がそれをどうやってやったかですが、ghostdog74のバージョンも好きです。

tar -czvf archive.tgz `find  test/ | egrep ".*\.html|.*\.php"`

正規表現に追加することで、拡張機能を追加できます。

7
MitMaro

Nickの答えは好きでしたが、これはプログラミングサイトなので、Antを使用してこれを行うのはなぜですか。 :)

次に、パラメータを入力して、さまざまなタイプのファイルを圧縮できます。

http://ant.Apache.org/manual/Tasks/Zip.html

4
James Black

find(GNU)を使用してすべてのphp、htmlなどのファイルを検索することができます。

find /path -type f \( -iname "*.php" -o -iname "*.css" -o -iname "*.js" -o -iname "*.ext" \) -exec tar -r --file=test.tar "{}" +;

その後、ジップアップすることができます

3
ghostdog74

パターン/式に基づいてファイルを新しいフォルダーにコピーするシェルスクリプトを記述し、内容を圧縮してからフォルダーを削除できます。さて、それの実際の構文については、あなたに任せてください:D。

1
barfoon