deepblue_86 Asked: 2015-10-18 09:17:21 +0800 CST2015-10-18 09:17:21 +0800 CST 2015-10-18 09:17:21 +0800 CST 计算目录中的特定文件 772 假设,我需要计算目录中以 o 结尾的每个文件。(例如 ab12.14o、70010340.09o)。我需要使用哪个命令? 我试过ls *.o | wc了,但没有用。 wc 2 个回答 Voted heemayl 2015-10-18T09:33:16+08:002015-10-18T09:33:16+08:00 不要使用ls。 使用 shell 数组存储以以下结尾的文件的名称o: files=( *o ) 现在做: echo "${#files[@]}" 获取文件的数量。 @steeldriver 提出了一个公平的观点,如果您没有匹配的文件名,那么 glob 模式将按字面意义进行。因此,即使没有匹配的文件名,您仍会将文件计数为 1。 要克服这个问题,请设置nullglobor failglobshell 选项: shopt -s nullglob shopt -s failglob Best Answer steeldriver 2015-10-18T09:35:50+08:002015-10-18T09:35:50+08:00 您可能只需.要从 glob 表达式中删除 - 这导致它只匹配以结尾.o而不是结尾的文件o 但是,更好的方法是使用find: find . -maxdepth 1 -name '*o' -printf 'x' | wc -c 您可以添加-type f以将其限制为普通文件(不包括目录)并删除-maxdepth 1如果您想递归计数。
不要使用
ls
。使用 shell 数组存储以以下结尾的文件的名称
o
:现在做:
获取文件的数量。
@steeldriver 提出了一个公平的观点,如果您没有匹配的文件名,那么 glob 模式将按字面意义进行。因此,即使没有匹配的文件名,您仍会将文件计数为 1。
要克服这个问题,请设置
nullglob
orfailglob
shell 选项:您可能只需
.
要从 glob 表达式中删除 - 这导致它只匹配以结尾.o
而不是结尾的文件o
但是,更好的方法是使用
find
:您可以添加
-type f
以将其限制为普通文件(不包括目录)并删除-maxdepth 1
如果您想递归计数。