問題は、*.xml が tar ではなくシェルによって解釈されることです。したがって、見つかった xml ファイル (存在する場合) は、tar コマンドを実行したディレクトリにあります。
必要なファイルを選択してからそれらを tar するには、複数段階の操作 (おそらくパイプを含む) を使用する必要があります。
最も簡単な方法は cd
にすることです ファイルがあるディレクトリに:
$ (cd /path/to/file && tar -cf /path/to/example.tar *.xml)
動作するはずです。
ブラケットはコマンドをグループ化するため、コマンドが終了しても元のディレクトリにとどまります。 &&は tar
を意味します 最初の cd
の場合にのみ実行されます 成功しました。
あなたの試みの1つで:
tar -cf example.tar -C /path/to/file "*.xml"
* 文字は実際に tar に渡されます。ただし、問題は、tar がアーカイブのメンバーの名前のワイルドカード マッチングしかサポートしていないことです。そのため、アーカイブからメンバーを抽出または一覧表示する場合はワイルドカードを使用できますが、アーカイブを作成する場合はワイルドカードを使用できません。
そのような状況では、私は見つけることに頼ることがよくあります(すでに述べたように)。 GNU find がある場合は、-printf オプションを使用して相対パスのみを表示する便利なオプションがあります:
find '/path/to/file' -maxdepth 1 -name '*.xml' -printf '%P\0' \
| tar --null -C '/path/to/file' --files-from=- -cf 'example.tar'
受け入れられた答えは、ファイルが単一のディレクトリから取得されることを前提としています。複数の -C
を使用する場合 次のコマンドは、シェルにファイル名を展開させ、それを tar に渡します。 .
tar -cf example.tar -C /path/to/file $(cd /path/to/file ; echo *.xml)