Masalahnya adalah, *.xml diinterpretasikan oleh shell, bukan oleh tar. Oleh karena itu, file xml yang ditemukannya (jika ada) ada di direktori tempat Anda menjalankan perintah tar.
Anda harus menggunakan operasi multi-tahap (mungkin melibatkan pipa) untuk memilih file yang Anda inginkan dan kemudian melakukan tar pada file tersebut.
Cara termudah adalah dengan cd
ke dalam direktori tempat file-file tersebut berada:
$ (cd /path/to/file && tar -cf /path/to/example.tar *.xml)
harus bekerja.
Tanda kurung mengelompokkan perintah bersama-sama, jadi setelah selesai Anda akan tetap berada di direktori asli Anda. &&berarti tar
hanya akan berjalan jika cd
awal berhasil.
Dalam salah satu upaya Anda:
tar -cf example.tar -C /path/to/file "*.xml"
karakter * memang diteruskan ke tar. Masalahnya, bagaimanapun, tar hanya mendukung pencocokan karakter pengganti pada nama anggota arsip. Jadi, meskipun Anda dapat menggunakan karakter pengganti saat mengekstraksi atau mencantumkan anggota dari arsip, Anda tidak dapat menggunakan karakter pengganti saat membuat arsip.
Dalam situasi seperti itu, saya sering mencari (seperti yang sudah Anda sebutkan). Jika Anda menemukan GNU, ada opsi bagus untuk mencetak hanya jalur relatif, menggunakan opsi -printf:
find '/path/to/file' -maxdepth 1 -name '*.xml' -printf '%P\0' \
| tar --null -C '/path/to/file' --files-from=- -cf 'example.tar'
Jawaban yang diterima mengasumsikan file diambil dari satu direktori. Jika Anda menggunakan beberapa -C
opsi, maka Anda memerlukan pendekatan yang lebih umum. Perintah berikut membuat shell memperluas nama file, yang kemudian diteruskan ke tar .
tar -cf example.tar -C /path/to/file $(cd /path/to/file ; echo *.xml)