2010-10-12 21:41:12 +0000 2010-10-12 21:41:12 +0000
217
217

Tel alle bestanden in een directory

Mogelijk duplicaat: Hoe kan ik het aantal mappen in een schijf tellen met behulp van Linux?

Ik heb een echt diepe mappenstructuur op mijn Linux-box. Ik wil graag alle bestanden in dat pad tellen, inclusief alle submappen.

Bijvoorbeeld, gezien deze mappenboom:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

Als ik in /home passeer, wil ik graag dat het vier bestanden retourneert. Of, bonuspunten als het vier bestanden en twee mappen retourneert. In principe wil ik het equivalent van rechtsklikken op een map op Windows en het selecteren van eigenschappen en zien hoeveel bestanden/mappen er in die map staan.

Hoe kan ik dit het gemakkelijkst doen? Ik heb een oplossing met een Python script dat ik heb geschreven, maar waarom is dit niet zo eenvoudig als het uitvoeren van ls | wc of iets dergelijks?

Antwoorden (5)

364
364
364
2010-10-12 21:44:53 +0000

find . -type f | wc -l

Uitleg: find . -type f vindt alle bestanden ( -type f ) in deze ( . ) directory en in alle subdirectories, de bestandsnamen worden dan geprint tot standaard één per regel.

Dit wordt dan omgeleid | naar wc (woordtelling) de -l optie vertelt wc alleen de regels van zijn invoer te tellen.

Samen tellen ze al uw bestanden.

49
49
49
2011-03-28 22:00:38 +0000

Bovenstaande antwoorden geven al antwoord op de vraag, maar ik voeg daar aan toe dat als je find zonder argumenten gebruikt (behalve in de map waar je de zoekopdracht wilt laten gebeuren) zoals in:

find . | wc -l

de zoekopdracht veel sneller gaat, bijna onmiddellijk, of in ieder geval voor mij. Dit komt omdat de type-clausule een stat() systeem aanroepen op elke naam om het type te controleren - het weglaten ervan voorkomt dit.

Dit heeft het verschil met het teruggeven van het aantal bestanden plus mappen in plaats van alleen bestanden, maar voor mij is het in ieder geval genoeg omdat ik dit meestal gebruik om te vinden welke mappen enorme hoeveelheden bestanden hebben die er voor eeuwig over doen om ze te kopiëren en te comprimeren. Door mappen te tellen kan ik nog steeds de mappen met de meeste bestanden vinden, ik heb meer snelheid nodig dan precisie.

26
26
26
2010-10-12 21:56:03 +0000

Voor bestanden:

find -type f | wc -l

Voor mappen:

find -mindepth 1 -type d | wc -l

Ze werken allebei in de huidige werkmap.

8
8
8
2010-10-13 01:58:12 +0000

Met bash 4+

shopt -s globstar
for file in **/*
do
  if [-d "$file"];then
    ((d++))
  elif [-f "$file"];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

hoeft u niet twee keer te bellen als u naar bestanden en mappen wilt zoeken.

8
8
8
2010-10-13 14:26:17 +0000

Lichte update naar geaccepteerd antwoord, als u een telling van dirs en dergelijke wilt

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn