Použijte -T
funkce tar, která mu řekne, aby načetl seznam souborů z jiného souboru (tar považuje každý řádek za samostatný soubor).
Poté můžete použít <()
notaci, aby váš shell vygeneroval pseudosoubor z výstupu příkazu:
tar cf ctlfiles.tar -T <(find /home/db -name "*.ctl")
Pokud váš shell nepodporuje <()
zápisu, můžete použít dočasný soubor:
find /home/db -name "*.ctl" > ctlfile-list
tar cf ctlfiles.tar -T ctlfile-list
rm ctlfile-list
Můžete použít funkci -print0 funkce find s funkcí -0 xargs takto:
find /home/db -name '*.ctl' -print0 | xargs -0 tar -cf ctlfiles.tar
-print0 (to je spojovník-tisk-nula) říká find, aby použil null jako oddělovač mezi cestami místo mezer, a -0 (to je spojovník nula) říká xargs, aby očekával totéž.
Upraveno za účelem přidání:
Pokud máte velký počet souborů, xargs může vyvolat tar více než jednou. Podívejte se do komentářů, jak se s tím vypořádat, nebo použijte příkaz find přímo vyvolat tar, jako je tento, který funguje s libovolným počtem souborů, i když mají v názvech mezery nebo nové řádky:
rm -f ctlfiles.tar
find /home/db -name '*.ctl' -exec tar -rf ctlfiles.tar {} +
Když je argument za "-T" "-", seznam souborů je převzat ze stdin. Nejnovější verze tar obvykle podporují volbu "-null", což znamená, že soubory uvedené ve zdroji specifikovaném "-T" " jsou odděleny nulou.
Následující text tedy pracuje s libovolným počtem souborů, které mohou obsahovat znaky nového řádku:
find /home/db -name '*.ctl' -print0 | tar --null -T - -cf ctlfiles.tar