Tar - サブフォルダ内のすべてのファイルを除外しますが、入れ子になったフォルダは除外します。

Tar - サブフォルダ内のすべてのファイルを除外しますが、入れ子になったフォルダは除外します。

次のフォルダの.tgzアーカイブを作成する必要があります。

pack
  |
  rest
    |
    vendor (folder)
    |
    ----index.php
    |
    ----info.log
    | 
    another (folder)
    |
    ---index.php
    |
    ---info.log
    |
    ---somefile.someext 
   |
   somefolder1
   |
   somefoldern
   |
   somefiles.somexts

単にexclude=index.phpetcを発行すると、意図しない結果が生じる可能性があります。行商人これにより、その名前のファイルが直接またはそのサブフォルダのいずれかに存在する可能性があります。残りのフォルダー内のすべてのファイルの内容を無視し、その下のサブフォルダーは、無視しないようにtarに指示できるかどうかを文書から知ることはできません。

答え1

この投稿に出会った人のために、少なくともUbuntu 14.04で動作するソリューションがあります。上記のフォルダ構造の場合

tar -zcf pack.tgz --exclude-from=/path/to/excludes.list pack

除外。リスト私の場合は、以下が含まれます。

rest/index.php
rest/info.log
rest/filetoexclude.ext

...デフォルトで除外するファイルのリスト。ガイドライン

  • Excepts.listファイルへの絶対パスを使用すると、スクリプト言語で実行されるシェルコマンドを使用してアーカイブを構築するためのコマンドを簡単に作成できます。
  • 除外されたファイルの形式はfolder/file.ext比較的アーカイブ中のフォルダに移動します。
  • 各ファイル名項目の後には改行文字が続く必要があります。テキストエディタでは、ファイル名の後にスペースを追加するのは簡単です。この場合、スペースは無視されません。

答え2

another/index.php""をパターンとして使用してください(または " rest/another/index.php")。

$ mkdir -p pack/rest/vendor
$ mkdir -p pack/rest/another
$ touch pack/rest/{vendor,another}/index.php
$ tar --create --verbose --file  xx.tar --exclude "another/index.php"  pack/
pack/
pack/rest/
pack/rest/another/
pack/rest/vendor/
pack/rest/vendor/index.php

findtarファイルの内容をより複雑に選択する場合は、正確な入力リストを作成できるようになるまで、トリミングやその他の操作を使用する方が簡単です。次にそれをインポートし、cpioスキーマ--format=ustarをエクスポートしてtarファイルを生成します。

関連情報