Vraag Hoe veel (200 000) bestanden verwijderen?


Ik moet 200 000 bestanden (allemaal) uit een map verwijderen en ik wil de map zelf niet verwijderen.

gebruikmakend van rm, krijg ik een "Argument lijst te lang" fout. Ik heb geprobeerd iets met xargs te doen, maar ik ben geen Shell-gozer, dus het werkt niet:

find -name * | xargs rm -f

17
2017-09-26 16:03


oorsprong


Waarom verwijder je de map niet en maak je deze opnieuw na verwijdering? - garconcn


antwoorden:


$ find /path/to/folder -type f -delete

35
2017-09-26 16:06



Het is waarschijnlijk het vermelden waard dat GNU find (zoals gebruikt door de meeste Linux-distributies) alleen bestanden kan verwijderen met -delete. Dit voorkomt ook problemen met bestanden met aanhalingstekens of nieuwe-regel tekens (hoewel je GNU find's zou kunnen gebruiken -print0 en GNU xarg's -0 opties om dat te verhelpen). - DerfK
@DerfK, leuke opmerking! Ook hebben veel mensen de neiging om mee te spelen xargs ondertussen find heeft -exec command {} + syntaxis. - poige
@DerfK: bedankt. Ik heb mijn antwoord bijgewerkt. - quanta


Je doet alles goed. Het is de '*' dat geeft je een probleem (de shell breidt het uit naar een lijst met bestanden in plaats van de find). De juiste syntaxis zou kunnen zijn:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(Het laatste is iets minder efficiënt omdat het langere namen zal doorgeven xargs, maar je zult het nauwelijks merken :-))

Als alternatief zou je aan je kunnen ontsnappen '*' zoals dit (maar in dat geval zal het ook proberen "." en ".." te verwijderen; het is geen buistelevisie - je krijgt een kleine waarschuwing :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Als uw bestandsnamen spaties bevatten, gebruik dan dit:

find . -type f -print0 | xargs -0 rm -f

5
2017-09-26 16:20



Dit werkt niet als u een bestandsnaam met een spatie hebt. - Iain
@lain: Ja, ik was net bezig met het bewerken van mijn antwoord om de truc voor spaties op te nemen :-) - dtoubelis


Met de volgende opdracht worden alle bestanden uit de map verwijderd stroom directory:

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

3
2017-09-26 16:15



-name '*' betekent niet "alle bestanden". Bestanden worden gezegd met: -type f - poige


je kan het proberen

find /path/to/folder -type f -print0  | xargs -0 rm -f

of

find /path/to/folder -type f -exec rm -f "{}" +

2
2018-05-05 09:29





Een pluim voor quantas antwoord, hier zijn enkele toevoegingen.

Als je bestanden met een bepaald naampatroon wilt verwijderen, kun je dit op deze manier schrijven. Ook toegevoegd -print zodat u kunt zien wat er gebeurt terwijl de bestanden worden verwijderd.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Dit verwijdert bijvoorbeeld alle jpegs in mijndirectory.


1