如何递归地计数Linux目录中的文件?
我发现了这个:
find DIR_NAME -type f ¦ wc -l
但是当我运行它时,它返回以下错误。
查找:路径必须在表达式之前:
如何递归地计数Linux目录中的文件?
我发现了这个:
find DIR_NAME -type f ¦ wc -l
但是当我运行它时,它返回以下错误。
查找:路径必须在表达式之前:
当前回答
根据上面给出的回复和评论,我列出了下面的文件计数清单。特别是它结合了@Greg Bell提供的解决方案和@Arch Stanton的评论 & @Schneems
计数当前目录和子目录中的所有文件
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-count.txt
计数当前目录及子目录中所有给定名称的文件
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | grep <enter_filename_here> | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-with-name-count.txt
其他回答
要确定当前目录中有多少文件,输入ls -1 | wc -l。这使用wc对ls -1输出中的行数(-l)进行计数。它不计算dotfiles。请注意,我在以前版本的HOWTO中使用的ls -l(这是一个“L”而不是前面例子中的“1”)实际上会给你一个比实际计数大1的文件计数。这一点要感谢内贾德。
如果你想只计算文件而不包括符号链接(这只是一个你可以做的其他事情的例子),你可以使用ls -l | grep -v ^l | wc -l(这是一个“l”而不是“1”,我们想要一个“长”列表)。Grep检查以“l”开头的任何行(表示链接),并丢弃该行(-v)。
相对速度:“ls -1 /usr/bin/ | wc -l”在未加载的486SX25上大约需要1.03秒(在此机器上/usr/bin/有355个文件)。“ls -l /usr/bin/ | grep -v ^l | wc -l”大约耗时1.19秒。
来源:http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html
找到-type f | wc -l
OR(如果目录是当前目录)
找到。-type f | wc -l
我们可以使用树命令来递归地显示所有的文件和文件夹。以及它显示在最后一行输出的文件夹和文件的计数。
$ 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
对于当前目录:
find -type f | wc -l
根据上面给出的回复和评论,我列出了下面的文件计数清单。特别是它结合了@Greg Bell提供的解决方案和@Arch Stanton的评论 & @Schneems
计数当前目录和子目录中的所有文件
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-count.txt
计数当前目录及子目录中所有给定名称的文件
function countit { find . -maxdepth 1000000 -type d -print0 | while IFS= read -r -d '' i ; do file_count=$(find "$i" -type f | grep <enter_filename_here> | wc -l) ; echo "$file_count: $i" ; done }; countit | sort -n -r >file-with-name-count.txt