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

我发现了这个:

find DIR_NAME -type f ¦ wc -l

但是当我运行它时,它返回以下错误。

查找:路径必须在表达式之前:


当前回答

这将完全正常工作。简单的短。如果要计算文件夹中存在的文件数量。

ls | wc -l

其他回答

找到-type f | wc -l

OR(如果目录是当前目录)

找到。-type f | wc -l

假设你想要一个每个目录的文件总数,试试:

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

bash:

使用()创建一个条目数组,并使用#获取计数。

FILES=(./*); echo ${#FILES[@]}

它不会递归计数文件,但我想先展示一个简单的选项。一个常见的用例可能是创建文件的滚转备份。这将创建日志文件。1,日志文件。2,日志文件。3等。

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

启用bash 4+ globstar的递归计数(由@tripleee提到)

FILES=(**/*); echo ${#FILES[@]}

要递归地获得文件的计数,我们仍然可以以相同的方式使用find。

FILES=(`find . -type f`); echo ${#FILES[@]}

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

$ 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

如果你想知道当前目录下每个目录下有多少文件:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

当然,这些都可以写在一行上。括号说明wc -l应该监视谁的输出(在本例中查找$i -type f)。