我需要计算大量目录上的文件数。有没有一种简单的方法可以使用 shell 脚本(使用 find、wc、sed、awk 或类似的)来做到这一点?只是为了避免必须在 python 中编写适当的脚本。
输出将是这样的:
$ <magic_command>
dir1 2
dir2 12
dir3 5
目录名称后面的数字将是文件的数量。一个加号将能够打开和关闭点/隐藏文件的计数。
谢谢!
我需要计算大量目录上的文件数。有没有一种简单的方法可以使用 shell 脚本(使用 find、wc、sed、awk 或类似的)来做到这一点?只是为了避免必须在 python 中编写适当的脚本。
输出将是这样的:
$ <magic_command>
dir1 2
dir2 12
dir3 5
目录名称后面的数字将是文件的数量。一个加号将能够打开和关闭点/隐藏文件的计数。
谢谢!
试试下面的一个:
du -a | cut -d/ -f2 | sort | uniq -c | sort -nr
find <dir> -type f | wc -l
find -type f将在每一行列出指定目录中的所有文件,wc -l计算从标准输入中看到的换行符的数量。
也供将来参考:像这样的答案是谷歌。
或多或少我在寻找什么:
find . -type d -exec sh -c 'echo "{}" `ls "{}" |wc -l`' \;
尝试 ls | wc
列出您目录中的文件并将文件输出列表作为输入提供给 wc
像这样的一种方式:
$ for dir in $(find . -type d )
> do
> echo $dir $(ls -A $dir | wc -l )
> done
如果您不希望隐藏文件计数,只需删除 -A 选项
find . -type d | xargs ls -1 | perl -lne 'if(/^\./ || eof){print $a." ".$count;$a=$_;$count=-1}else{$count++}'
下面是测试:
> find . -type d
.
./SunWS_cache
./wicked
./wicked/segvhandler
./test
./test/test2
./test/tempdir.
./signal_handlers
./signal_handlers/part2
> find . -type d | xargs ls -1 | perl -lne 'if(/^\./ || eof){print $a." ".$count;$a=$_;$count=-1}else{$count++}'
.: 79
./SunWS_cache: 4
./signal_handlers: 6
./signal_handlers/part2: 5
./test: 6
./test/tempdir.: 0
./test/test2: 0
./wicked: 4
./wicked/segvhandler: 9
Mehdi Karamosly 解决方案的通用版本,用于在不更改当前目录的情况下列出任何目录的文件夹
DIR=~/test/ sh -c 'cd $DIR; du -a | cut -d/ -f2 | sort | uniq -c | sort -nr'
解释:
我使用这些功能:
nf()(for d;do echo $(ls -A -- "$d"|wc -l) "$d";done)
nfr()(for d;do echo $(find "$d" -mindepth 1|wc -l) "$d";done)
两者都假设文件名不包含换行符。
这是仅限 bash 的版本:
nf()(shopt -s nullglob dotglob;for d;do a=("$d"/*);echo "${#a[@]} $d";done)
nfr()(shopt -s nullglob dotglob globstar;for d;do a=("$d"/**);echo "${#a[@]} $d";done)
我喜欢基于 du 的答案的输出,但是当我查看大型文件系统时,它需要很长时间,所以我整理了一个基于 ls 的小脚本,它提供了相同的输出,但速度更快:
for dir in `ls -1A ~/test/`;
do
echo "$dir `ls -R1Ap ~/test/$dir | grep -Ev "[/:]|^\s*$" | wc -l`"
done
您可以尝试将 ls 命令的输出复制到文本文件中,然后计算该文件中的行数。
ls $LOCATION > outText.txt; NUM_FILES=$(wc -w outText.txt); echo $NUM_FILES
find -type f -printf '%h\n' | sort | uniq -c | sort -n