Hvordan kan jeg få en optælling af filer i en mappe ved hjælp af kommandolinjen?
Jeg har en mappe med et stort antal filer. Jeg kan ikke se en ls
-switch til at angive antallet. Er der en eller anden kommandolinje magi til at få en optælling af filer?
195
3
Ved at bruge en bred definition af "fil"
(bemærk, at den ikke tæller skjulte filer med og antager, at filnavne ikke indeholder newline-tegn).
For at inkludere skjulte filer (undtagen
.
og..
) og undgå problemer med newline-tegn, er den kanoniske måde at gøre det på:Eller rekursivt:
For en snæver definition af fil:
Hvis du ved, at den aktuelle mappe indeholder mindst én ikke-skjult fil:
Dette kan naturligvis generaliseres til enhver glob.
I et script har dette den undertiden uheldige bivirkning at overskrive positionsparametrene. Du kan omgå dette ved at bruge en subshell eller med en funktion (Bourne/POSIX-version) som f.eks:
En alternativ løsning er
$(ls -d -- * | wc -l)
. Hvis glob'en er*
, kan kommandoen forkortes til$(ls | wc -l)
. Parsing af output afls
gør mig altid urolig, men her burde det virke, så længe dine filnavne ikke indeholder newlines, eller dinls
undgår dem. Og$(ls -d -- * 2>/dev/null | wc -l)
har den fordel, at den håndterer tilfælde af en ikke-matchende glob elegant (dvs. den returnerer 0 i det tilfælde, hvorimodset *
-metoden kræver en besværlig test af, om glob'en måske er tom).Hvis filnavne kan indeholde newline-tegn, er et alternativ at bruge
$(ls -d ./* | grep -c /)
.Enhver af disse løsninger, der er afhængige af at overdrage udvidelsen af en glob til
ls
, kan fejle med en argument list too long-fejl, hvis der er mange matchende filer.