ディレクトリとそのサブディレクトリ内のすべての.phpファイルと.htmlファイルをtarしたいです。私が使用する場合
tar -cf my_archive *
すべてのファイルをtarしますが、これは望ましくありません。私が使用する場合
tar -cf my_archive *.php *.html
サブディレクトリは無視されます。どのようにtarを再帰的に作成し、2種類のファイルのみを含めることができますか?
find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -
1つの方法は次のとおりです。
tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )
ただし、この方法にはいくつかの注意事項があります。
これらの回避策は、findコマンドの内容をファイルに出力し、tarに「-T、--files-from FILE」オプションを使用することです。
異なるパターンで複数のファイルを圧縮するには、次のようにスペースで区切ってgzファイルにすべて追加します。
tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json
これにより、任意のサブディレクトリからAliceで始まるすべての.ymlファイルが追加され、任意のサブディレクトリからBobで始まるすべての.jsonファイルが追加されます。
それらをファイルに入れる
find . \( -name "*.php" -o -name "*.html" \) -print > files.txt
次に、このファイルをtarへの入力として使用し、使用するtarのバージョンに応じて-Iまたは-Tを使用します
Hを使用してシンボリックリンクをコピーする
tar cfh my.tar -I files.txt
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
これはスペースを含むパスを処理します:
find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +