GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu odstranit všechny soubory z adresáře, když hlásí příliš dlouhý seznam argumentů

Řešení 1:

find . -maxdepth 1 -type f -exec rm -f {} \;

prostě to trvá příliš dlouho (jeden exec rm na soubor).

tento je mnohem efektivnější:

find . -maxdepth 1 -type f -print0 | xargs -r0 rm -f

protože vyžaduje tolik názvů souborů jako argument pro rm, kolik je to možné, pak spustí rm s dalším zatížením názvů souborů... může se stát, že rm je voláno pouze 2 nebo 3krát.

Řešení 2:

V případě, že nemůžete odstranit adresář, můžete vždy použít najít.

find . -maxdepth 1 -type f -exec rm -f {} \;

To smaže všechny soubory v aktuálním adresáři a pouze aktuální adresář (nikoli podadresáře).

Řešení 3:

Obojí problém vyřeší. Zde je analýza příslušného výkonu každé techniky.

find . -name WHATEVER -exec rm -rf {} \;

nebo

ls WHATEVER | xargs rm -rf

Problém pramení z rozšiřování bash "*" s každou jednotlivou položkou v adresáři. Obě tato řešení fungují postupně s každým souborem.

Řešení 4:

Dokázal jsem to udělat zálohováním jedné úrovně:

cd ..

A běží:

rm directory name -rf

A pak znovu vytvořit adresář.

Řešení 5:

Všechna tato vyvolání hledání jsou velmi pěkná, ale zřídkakdy si přesně pamatuji potřebnou nomenklaturu, když spěchám:místo toho používám ls. Jak někdo zmiňuje, ls . fungovalo by to, ale preferuji ls -1 jako v:

ls -1 | xargs -n 100 rm -rf

S číslem -n xxx je docela bezpečné si hrát, protože překročení maxima bude buď automaticky opraveno (pokud je překročena velikost-max; viz -s ), nebo pokud je překročen args-max pro aplikaci, bude to obvykle spíše zřejmé.

Je třeba poznamenat, že grep je užitečné vložit doprostřed tohoto řetězce, když chcete smazat pouze podmnožinu souborů ve velkém adresáři a nechcete z jakéhokoli důvodu použít find.

Tato odpověď předpokládá, že používáte základní nástroje Gnu pro vaše ls, xargs atd.


Linux
  1. Rekurzivně vypisujte všechny soubory v adresáři včetně souborů v adresářích symbolických odkazů

  2. Chyba příliš dlouhého seznamu argumentů pro příkazy rm, cp, mv

  3. Jak zobrazit seznam nedávno smazaných souborů z adresáře?

  1. Jak mohu pomocí ls vypsat pouze neprázdné soubory?

  2. Jak najít / vypsat všechny jedinečné soubory ve dvou adresářích?

  3. Jak odstranit všechny soubory v adresáři kromě některých?

  1. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  2. Jak najít všechny nulabajtové soubory v adresáři

  3. Jak vypsat všechny soubory oddílu na linuxu?