简体   繁体   中英

Count number of files in several folders with Unix command

I'd like to count the number of files in each folder. For one folder, I can do it with:

find ./folder1/ -type f | wc -l

I can repeat this command for every folder (folder2, folder3, ...), but I'd like to know if it is possible to get the information with one command. The output should look like this:

folder1 13
folder2 4
folder3 1254
folder4 327
folder5 2145

I can get the list of my folders with:

find . -maxdepth 1 -type d

which returns:

./folder1
./folder2
./folder3
./folder4
./folder5

Then, I thought about combining this command with the first one, but I don't know exactly how. Maybe with "-exec" or "xargs"?

Many thanks in advance.

A possible solution using xargs is to use the -I option, which replaces occurrences of replace-str ( % in the code sample below) in the initial-arguments with names read from standard input:

find . -maxdepth 1 -type d -print0 | xargs -0 -I% sh -c 'echo -n "%: "; find "%" -type f | wc -l'

You also need to pass the find command to sh if you want to pipe it with wc , otherwise wc will count files in all directories.

Another solution (maybe less cryptic) is to use a one-liner for loop:

for d in */; do echo -n "$d: "; find "$d" -type f | wc -l; done

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM