GNU/Linux >> Znalost Linux >  >> Linux

Použití find a tar se soubory se speciálními znaky v názvu

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

Linux
  1. Používáte Sed se speciálními znaky?

  2. Najděte a zkopírujte soubory

  3. Najít soubory a rozbalit je (s mezerami)

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Najděte největší soubory a adresáře v Linuxu

  3. Hledání spustitelných souborů pomocí ls a grep

  1. Použití linuxového příkazu find – Použití s ​​příklady

  2. Jak komprimovat a extrahovat soubory pomocí příkazu tar v systému Linux?

  3. najít a odstranit soubory s mezerou pomocí příkazu find v Linuxu