Vraag Hoe verwijder ik alle bestanden uit een map?


Het dichtstbijzijnde dat ik heb gekregen is

# rm /path/to/directory/*.*

maar dat werkt niet voor bestanden die geen extensie hebben ...


205
2017-09-06 07:58


oorsprong




antwoorden:


Linux gebruikt geen extensies. Het is aan de maker van het bestand om te beslissen of hij wil dat de naam een ​​extensie heeft. Linux kijkt naar de eerste byte om erachter te komen met wat voor soort bestand het te maken heeft.

Om alles in een map te verwijderen, gebruikt u:

rm /path/to/directory/*

U kunt de -r optie, bijvoorbeeld:

rm -r /path/to/directory/* 

om ook alle submappen (samen met al hun inhoud) te verwijderen in de map waar u de inhoud van verwijdert. Anders zal er een foutmelding verschijnen die u informeert dat de directory niet wordt verwijderd.


235
2017-09-06 08:06



Als u ook verborgen bestanden wilt verwijderen, voert u deze uit shopt -s dotglob voor het hardlopen rm (...) - danjjl
De middelen all files ;) *.* betekent alle bestanden die een bevatten . ergens in de naam - Rinzwind
@Rinzwind, nauwkeuriger gezegd, de asterisk betekent "nul of meer van elk teken". Zo *a* betekent nul of meer tekens, gevolgd door a gevolgd door nul of meer tekens. Het zou overeenkomen met de bestandsnamen happy, apple, a of la. - DisgruntledGoat
@ user784637 je bent te snel onder de indruk - barlop
Dit is het gewenste commando: rm - * - anon58192932


  • Verwijderen de map met al zijn inhoud (inclusief alle interieurmappen):

    rm -rf /path/to/directory
    
  • Om alle te verwijderen inhoud van de map(inclusief alle interieurmappen) maar niet de map zelf:

    rm -rf /path/to/directory/*
    

    of

    rm -rf /path/to/directory/{*,.*}
    

    als u ervoor wilt zorgen dat verborgen bestanden / mappen ook worden verwijderd.

  • Om alle "bestanden" uit een map te verwijderen (niet interieurmappen verwijderen):

    rm -f /path/to/directory/{*,.*}
    

Waar:

  • rm - betekent "verwijderen"
  • -f - betekent "dwingen"wat handig is als u bijvoorbeeld niet gevraagd of gevraagd wilt worden als u een archief wilt verwijderen.
  • -r - betekent "recursieve"wat betekent dat je elke map recursief wilt bekijken en alles wilt verwijderen.

126
2017-09-07 17:26



Ik vond dit het uitgebreidere en behulpzamere antwoord, naast het antwoord dat was gemarkeerd als Geaccepteerd. - inspirednz
rm -rf /path/to/directory/* verwijdert geen verborgen bestand in de map, bijvoorbeeld .htaccess. Kan zijn rm -rf /path/to/directory/.? Heb het niet geprobeerd. - Mark Berry
@MarkBerry rm -rf /path/to/directory/.* - Lilian A. Moraru
@ LilianA.Moraru, ik heb vandaag wat getest. rm -rf /path/to/directory/.* verwijdert alleen het verborgen bestand (en) in de opgegeven map. Kijkend naar de reactie van de @ danjjl op het antwoord van @ Rinzwind om ook verborgen bestanden te verwijderen shopt -s dotglob voor het hardlopen rm -rf /path/to/directory/*. - Mark Berry
VOORZICHTIGHEID: rm -rf /path/to/directory/.* op mijn systeem heeft ervoor gezorgd dat items zijn verwijderd /path/to. Gelukkig had ik zojuist een back-up gemaakt van mijn volledige gegevens op een aparte schijf. Onnodig te zeggen, NIET de opdracht geven rm -rf /path/to/directory/.* tenzij u een back-up hebt gemaakt van uw hele computer naar een afzonderlijke / beveiligde locatie! - lawlist


Ga als volgt te werk om alle bestanden in de map (inclusief verborgen bestanden en submappen) te verwijderen:

rm -rf /path/to/directory/{*,.*}

30
2017-11-23 09:38



Dit zou het prachtig geaccepteerde antwoord moeten zijn. Dank je! - Nam G VU
Komt deze glob niet overeen "." en ook? - hertzsprung
@hertzsprung - het doet, en het geeft je een waarschuwing dat het niet kan verwijderen ./ en ../, maar het zal nog steeds de verborgen bestanden verwijderen. - Ryan Wheale
Dit werkt niet op de Mac-console, verborgen bestanden zijn er nog steeds met die opdrachtregel. - agapitocandemor


Als u alleen bestanden in / path / to / directory wilt verwijderen die u kunt doen

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

of

find /path/to/directory -type f -exec rm '{}' \;

Je kunt er veel mee doen find, het voordeel is dat je kunt opsommen wat er is gevonden zonder dat je er naar luistert rm zodat je kunt zien wat er wordt verwijderd voordat je begint.


8
2017-09-06 12:13



GNU find als een -delete predikaat. Als je het nog steeds wilt gebruiken -exec, vervangen \; met + zal verzamelen rm roept samen, verhoging van de efficiëntie. - enzotib
grote hoeveelheden bestanden met '+' veroorzaken problemen, omdat de lijst te groot is, hetzelfde als rm -f *. en bij het verwijderen van grote hoeveelheden bestanden uit dezelfde map (in millons praten) zijn ze allebei niet goed :) Uiteindelijk kwam C ++ langs en verwijderde bestanden in volgorde van inodes in dir-tree. - Osis
Je zou echt een - na de rm moeten toevoegen. Zonder dat, als je een bestandsnaam hebt, worden rf of soortgelijk geïnterpreteerd als argumenten voor rm. bijv. xargs -0 rm - or -exec rm - {} \; - Richm
u kunt ook het argument -n voor xargs opgeven. Dat zal ervoor zorgen dat het de rm commando's opsplitst naar een maximum aantal argumenten, d.w.z. 'xargs -n 100 -0 rm -' zal bestanden in brokken van 100 verwijderen. - Richm
U kunt ook -maxdepth 1 toevoegen om ervoor te zorgen dat find geen bestanden uit submappen terugzendt. d.w.z. vind / pad / naar / map -maxdepth 1 -type f - Richm


Als u ook alle submappen en de map zelf wilt verwijderen, kunt u gebruiken rm -rf /path/to/directory. Maar controleer altijd uw regel voordat u op Return drukt. rm -rf kan ook veel havock veroorzaken, b.v. als je per ongeluk een spatie invoegt na de eerste schuine streep terwijl je superuser permissies hebt ...


6
2017-09-07 08:51





Om alle bestanden en mappen te verwijderen (inclusief de verborgen degenen) in een map, kunt u het volgende proberen:

  • verwijder de map en maak deze opnieuw

    rm -rf dir_name && mkdir dir_name
    
  • gebruik find

    find dir_name -mindepth 1 -delete  
    

Hier specificeren we -mindepth 1 om de map dir_name zelf uit te sluiten.
Neem een ​​kijkje op de volgende link:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory


5
2017-11-27 16:05



Bedankt voor uw advies en ik heb meer uitleg toegevoegd voor de links. - zeekvfu
Wees voorzichtig, aangezien het verwijderen en opnieuw maken van de map kan resulteren in verschillende / verkeerde rechten voor deze map! - einjohn


Jij kan cd in de directory en voer de opdracht uit rm *.* net als in DOS als je het je herinnert.


1
2018-05-01 00:59



DOS is DEL voor bestanden en RMDIR voor lege mappen- en verborgen en systeembestanden moeten eerst die ATTRIB-kenmerken hebben verwijderd. Niet zo eenvoudig;) - Eric


Om de huidige map te verwijderen, kunt u deze bijvoorbeeld gebruiken rm -d ./*

-d vertelt ook om mappen te verwijderen.


0
2017-08-29 07:17





Omdat deze vraag constant bovenaan staat bij Google wanneer ik dit zelf zoek:

De andere antwoorden hebben verschillende problemen:

  1. Sommigen van hen omvatten . en .. wat lawaaierig, verwarrend en vervelend is.

  2. Sommigen vergeten verborgen bestanden (bestanden beginnen met een punt).

  3. Ze verwijderen niet in een correcte (diepste-eerste) volgorde om verwijdering van de map mogelijk te maken.

  4. Ze dalen af ​​naar andere (gemonteerde) bestandssystemen, wat vaak ongewenst is.

  5. Ze zijn moeilijk uit te breiden met extra parameters (hieronder meer).

Dus, om RECENSIVED alle bestanden EN mappen in een map te verwijderen, doe dit:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Merk op dat ik een -xdev argument om te voorkomen dat je afdaalt in bergen (zoals /proc enz.).

Waarom niet -depth of -delete?

Ondanks dat mensen me hier voortdurend op baseren, hebben die methoden een keerzijde: het lijkt niet alsof ze voldoende uitbreidbaar zijn om -pruneeen subdirectory (zonder meer problemen te introduceren). In tegenstelling tot deze methode zou je kunnen invoegen

-not \( -path "${DIR}/subdir" -prune \)

voor de -mindepth argument om uit te sluiten subdir van het verwijderen van de inhoud.


-1
2018-05-21 00:54



En voor diepte-eerste orde, is er een -depth vlag binnen find daarom. - Sergiy Kolodyazhnyy
Eh ... waarom niet gewoon gebruiken -delete met find? -delete is diepte-eerst. Je gaat al uit van niet-POSIX find met de -printf, dus je kunt het net zo goed gebruiken -delete of -depth -print0 | xargs -0 rm - muru
@muru: Omdat ik niet beter wist ... zal ik het veranderen. - Mehrdad
@muru: het lijkt erop dat je methode niet werkt -not \( -path "$DIR/subdir" \)... maar de mijne wel? Waarom? - Mehrdad
@Mehrdad wat moet dat doen? - muru