Ř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.