Il problema è che *.xml viene interpretato dalla shell, non da tar. Pertanto i file xml che trova (se ce ne sono) si trovano nella directory in cui hai eseguito il comando tar.
Dovresti utilizzare un'operazione in più fasi (magari coinvolgendo le pipe) per selezionare i file desiderati e quindi tararli.
Il modo più semplice sarebbe solo cd
nella directory in cui si trovano i file:
$ (cd /path/to/file && tar -cf /path/to/example.tar *.xml)
dovrebbe funzionare.
Le parentesi raggruppano i comandi insieme, quindi quando hanno finito sarai ancora nella tua directory originale. Il &&indica il tar
verrà eseguito solo se l'iniziale cd
ha avuto successo.
In uno dei tuoi tentativi:
tar -cf example.tar -C /path/to/file "*.xml"
il carattere * è effettivamente passato a tar. Il problema, tuttavia, è che tar supporta solo la corrispondenza dei caratteri jolly sui nomi dei membri di un archivio. Pertanto, mentre puoi utilizzare i caratteri jolly durante l'estrazione o l'elenco dei membri da un archivio, non puoi utilizzare i caratteri jolly quando crei un archivio.
In tali situazioni spesso ricorro a trovare (come hai già detto). Se hai GNU find, ha la bella opzione per stampare solo il percorso relativo, usando l'opzione -printf:
find '/path/to/file' -maxdepth 1 -name '*.xml' -printf '%P\0' \
| tar --null -C '/path/to/file' --files-from=- -cf 'example.tar'
La risposta accettata presuppone che i file siano presi da una singola directory. Se usi più -C
opzioni, allora hai bisogno di un approccio più generale. Il comando seguente fa espandere alla shell i nomi dei file, che vengono poi passati a tar .
tar -cf example.tar -C /path/to/file $(cd /path/to/file ; echo *.xml)