如何递归地计数Linux目录中的文件?
我发现了这个:
find DIR_NAME -type f ¦ wc -l
但是当我运行它时,它返回以下错误。
查找:路径必须在表达式之前:
如何递归地计数Linux目录中的文件?
我发现了这个:
find DIR_NAME -type f ¦ wc -l
但是当我运行它时,它返回以下错误。
查找:路径必须在表达式之前:
当前回答
ls -l | grep -e -x -e -dr | wc -l
长串 过滤文件和dirs 计算过滤后的行号
其他回答
我编写了ffcnt来加快特定情况下的递归文件计数:支持区段映射的旋转磁盘和文件系统。
它可能比ls或基于find的方法快一个数量级,但是YMMV。
如果你想避免错误的情况,不要让wc -l看到有换行符的文件(它将被算作2+文件)
例:考虑这样一种情况,我们有一个文件,其中只有一个EOL字符
> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2
因为至少gnu wc似乎没有一个选项来读取/计数一个以空结束的列表(除了从文件中),最简单的解决方案就是不传递文件名,而是每次找到文件时输出一个静态输出,例如在上面的同一个目录中
> find -type f -exec printf '\n' \; | wc -l
1
或者你的发现是否支持
> find -type f -printf '\n' | wc -l
1
假设你想要一个每个目录的文件总数,试试:
for d in `find YOUR_SUBDIR_HERE -type d`; do
printf "$d - files > "
find $d -type f | wc -l
done
对于当前目录,尝试这样做:
for d in `find . -type d`; do printf "$d - files > "; find $d -type f | wc -l; done;
如果你有很长的空格名,你需要改变IFS,像这样:
OIFS=$IFS; IFS=$'\n'
for d in `find . -type d`; do printf "$d - files > "; find $d -type f | wc -l; done
IFS=$OIFS
这将完全正常工作。简单的短。如果要计算文件夹中存在的文件数量。
ls | wc -l
可以使用ncdu命令。它将递归地计算Linux目录包含多少文件。下面是一个输出示例:
它有一个进度条,如果你有很多文件,这很方便:
在Ubuntu上安装:
sudo apt-get install -y ncdu
基准:我使用https://archive.org/details/cv_corpus_v1.tar(380390个文件,11 GB)作为文件夹,其中必须计算文件的数量。
找到。-type f | wc -l:大约1m20s完成 Ncdu:大约1m20s完成