GNU/Linux >> Znalost Linux >  >> Linux

tar -C se vzorem souboru zástupných znaků

Problém je v tom, že *.xml je interpretován shellem, nikoli tar. Soubory xml, které najde (pokud nějaké existují), jsou tedy v adresáři, ve kterém jste spustili příkaz tar.

Museli byste použít vícestupňovou operaci (možná zahrnující potrubí) k výběru požadovaných souborů a poté je tarovat.

Nejjednodušší způsob by byl právě cd do adresáře, kde jsou soubory:

$ (cd /path/to/file && tar -cf /path/to/example.tar *.xml)

by mělo fungovat.

Závorky seskupují příkazy dohromady, takže po jejich dokončení budete stále ve svém původním adresáři. &&znamená tar spustí se pouze v případě, že počáteční cd bylo úspěšné.


V jednom z vašich pokusů:

tar -cf example.tar -C /path/to/file "*.xml"

znak * je skutečně předán tar. Problém je však v tom, že tar podporuje shodu zástupných znaků pouze u jmen členů archivu. Takže zatímco můžete použít zástupné znaky při extrahování nebo výpisu členů z archivu, nemůžete použít zástupné znaky při vytváření archivu.

V takových situacích se často uchýlím k hledání (jak jste již zmínil). Pokud máte GNU find, má příjemnou možnost vytisknout pouze relativní cestu pomocí volby -printf:

find '/path/to/file' -maxdepth 1 -name '*.xml' -printf '%P\0' \
| tar --null -C '/path/to/file' --files-from=- -cf 'example.tar'

Přijatá odpověď předpokládá, že soubory jsou převzaty z jednoho adresáře. Pokud používáte více -C možnosti, pak potřebujete obecnější přístup. Následující příkaz má shell rozbalit názvy souborů, které jsou pak předány tar .

tar -cf example.tar -C /path/to/file $(cd /path/to/file ; echo *.xml)

Linux
  1. Začínáme s ls

  2. Jak mohu chránit heslem soubor .tgz pomocí tar v Unixu?

  3. Jak zkombinovat příkaz „tar“ s příkazem „najít“

  1. Jak vytvořit soubor Zip z obsahu složky s určitým vzorem názvu?

  2. Otevření souboru .tar.gz jediným příkazem

  3. Kopírovat soubor Linux s ETA?

  1. Upozornění s nftw

  2. vytvořit tar s více adresáři a umístěními souborů

  3. tar:krátké čtení