如何递归地计数Linux目录中的文件?

我发现了这个:

find DIR_NAME -type f ¦ 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完成

其他回答

可以使用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完成

这应该可以工作:

find DIR_NAME -type f | wc -l

解释:

-type f只包括文件。 |(而不是……)将find命令的标准输出重定向到wc命令的标准输入。 Wc (word count的缩写)对输入(docs)的换行、单词和字节进行计数。 -l只计算换行。

注:

将DIR_NAME替换为。执行当前文件夹中的命令。 您还可以删除类型f以在计数中包括目录(和符号链接)。 如果文件名可以包含换行符,这个命令可能会被高估。

解释为什么你的例子不起作用:

在您所显示的命令中,您没有使用“Pipe”(|)来连接两个命令,而是使用了shell不将其识别为命令或类似内容的断线(δ)。这就是为什么你会得到错误消息。

这里有很多正确答案。这是另一个!

find . -type f | sort | uniq -w 10 -c

在哪里。是要查找的文件夹,10是对目录进行分组的字符数。

我们可以使用树命令来递归地显示所有的文件和文件夹。以及它显示在最后一行输出的文件夹和文件的计数。

$ tree path/to/folder/
path/to/folder/
├── a-first.html
├── b-second.html
├── subfolder
│   ├── readme.html
│   ├── code.cpp
│   └── code.h
└── z-last-file.html

1 directories, 6 files

对于树命令的最后一行输出,我们可以在它的输出上使用tail命令

$ tree path/to/folder/ | tail -1
1 directories, 6 files

为了安装树,我们可以使用下面的命令

$ sudo apt-get install tree

由于UNIX中的文件名可能包含换行符(是的,换行符),wc -l可能会计算过多的文件。我将为每个文件打印一个点,然后计算这些点:

find DIR_NAME -type f -printf "." | wc -c

注意:-printf选项只适用于GNU findutils中的find。你可能需要安装它,比如在Mac上。