Jako robustní řešení použijte find
k oddělení názvů souborů znakem null a poté přímo do tar
, který čte vstup oddělený nulou:
find . -maxdepth 1 -name '*.csv' -print0 |
tar -czf archive.tgz --null -T -
To nyní zvládne vše názvy souborů správně a není omezen ani počtem souborů.
Pomocí ls
generování seznamu názvů souborů k analýze jiným programem je běžný antivzor, kterému je třeba se vyhnout, kdykoli je to možné. find
může generovat výstup oddělený nulou (-print0
), kterou může většina nástrojů dále číst nebo analyzovat. Protože znak null je jediný znak, který se nemůže objevit v názvu souboru (a /
, samozřejmě), budete s tím vždy v bezpečí.
Ne, nelze připojit ke komprimovanému souboru tar, aniž byste jej nejprve dekomprimovali.
Nicméně tar může přijmout svůj seznam souborů ke zpracování ze souboru, takže můžete jednoduše:
ls *.csv > temp.txt
tar -zcf ball.tgz -T temp.txt
@slhck poukazuje na to, že výše uvedené řešení nebude fungovat, pokud budou v názvech souborů mezery (a pravděpodobně další nepříjemné znaky). Tato verze uzavírá každý název souboru do dvojitých uvozovek:
ls *.csv | sed -e 's/^\(.*\)$/"\1"/' > temp.txt
tar -zcf ball.tgz -T temp.txt
(To se samozřejmě přeruší, pokud máte v názvech souborů dvojité uvozovky, v takovém případě dostanete, co si zasloužíte. :)