web-dev-qa-db-ja.com

すべてのサブディレクトリ内の特定のファイルタイプをtarする方法は?

ディレクトリとそのサブディレクトリ内のすべての.phpファイルと.htmlファイルをtarしたいです。私が使用する場合

tar -cf my_archive *

すべてのファイルをtarしますが、これは望ましくありません。私が使用する場合

tar -cf my_archive *.php *.html

サブディレクトリは無視されます。どのようにtarを再帰的に作成し、2種類のファイルのみを含めることができますか?

65
user1566515

find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -

112
DeeDee

1つの方法は次のとおりです。

tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )

ただし、この方法にはいくつかの注意事項があります。

  1. スペースが含まれるファイルまたはディレクトリがある場合は失敗します。
  2. ファイルが非常に多く、コマンドラインの最大長がいっぱいになると失敗します。

これらの回避策は、findコマンドの内容をファイルに出力し、tarに「-T、--files-from FILE」オプションを使用することです。

9
Robin Sheat

異なるパターンで複数のファイルを圧縮するには、次のようにスペースで区切ってgzファイルにすべて追加します。

tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

これにより、任意のサブディレクトリからAliceで始まるすべての.ymlファイルが追加され、任意のサブディレクトリからBobで始まるすべての.jsonファイルが追加されます。

4
Sairam Krish

それらをファイルに入れる

find . \( -name "*.php" -o -name "*.html" \) -print > files.txt

次に、このファイルをtarへの入力として使用し、使用するtarのバージョンに応じて-Iまたは-Tを使用します

Hを使用してシンボリックリンクをコピーする

tar cfh my.tar -I files.txt 
0
Noam Geffen

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -I 'pigz -9' -cf target.tgz

マルチコアまたは1つのコアのみ:

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz

0

これはスペースを含むパスを処理します:

find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +
0