Linux显示目录中有多少个文件名以两位数结尾的命令是什么

Linux显示目录中有多少个文件名以两位数结尾的命令是什么

Linux下显示目录中有多少个以两位数结尾的文件名的命令是什么?使用ls这样的命令:

ls -l | wc –l  *[0-9][0-9]

答案1

在 Bash 中,以下操作是非递归的。你当然可以将它放在一个函数中:

shopt -q nullglob || restore=1 && shopt -s nullglob
var=(*[0-9][0-9])
echo ${#var[@]}
[ 1 -eq "$restore" ] && shopt -u nullglob

即使你有疯狂的文件名,这也有效。如果你的文件名不疯狂,那么你可以使用这种ls方法:

ls -d1b *[0-9][0-9] | wc -l

请注意,我以前使用的标志ls是不同的:-d将列出目录,而不是其内容(如果您有一个名为something00例如的目录);-1表示使用单列进行输出;-b转义文件名,这将使大多数疯狂的文件名起作用。

something00这两个都将包括计数中指定的目录。如果您只需要文件或递归,find那就是您所寻找的。这将递归地搜索当前目录 ( .),仅查找文件 ( -type f):

find . -type f -name '*[0-9][0-9]' -printf 'f\n' | wc -l

请注意使用-printf, 只打印字母f而不是文件名。您只想对它们进行计数,这样就可以免受疯狂的文件名的影响。

答案2

如果不需要wc -l,您可以使用tree如下命令。

tree -P "*[0-9][0-9]" foldername/

测试

在我的一个文件夹中,我创建了 3 个以两位数结尾的文件。

首先,我发出 ls 来查看所有文件。

bash-3.2$ ls
1aga21  abcd  kshexp.ksh  new.txt  temp  temp1  temp12  temp2  temp3  temp34

现在,我向上一层文件夹使用树命令。

之后,我发出tree如下命令。

bash-3.2$ tree -P "*[0-9][0-9]" jun4th/
jun4th/
|-- 1aga21
|-- temp12
`-- temp34

0 directories, 3 files

正如您所看到的,最后一行列出了符合我们条件的文件总数。这-P命令标志tree是指定模式。

编辑

正如 derobert 指出的那样,如果存在以 2 个数字结尾的目录,并且该目录又包含以 2 个数字结尾的多个文件,则 tree 命令将生成所有文件并导致更嘈杂的输出。我们可以通过将原始命令调整为如下所示来防止这种情况。

tree -P "*[0-9][0-9]" -L 1 jun4th/

请注意该标志-L 1,这意味着仅在当前目录下的一个子级别中查找文件。

答案3

如果你不介意 Perl:

perl -E '@a=<*[0-9][0-9]>;say scalar @a'

请注意,这(与迄今为止提出的所有其他解决方案一样)假设您要计算名称以两个结尾的文件或者更多数字。该文件foo123也将被计数。

如果这不是你想要的,下面的 Perl 将打印所有的计数文件(与文件和目录相反)其名称以两位数字结尾:

perl -E 'say scalar grep { -f && /[^0-9][0-9]{2}\z/ } <*>'

答案4

这是一种可移植的方法find

find ././ ! -type d -name '*[0-9][0-9]' | grep -c '^\./\./'

以及外壳函数:

set -- ./*[0-9][0-9]
for f do
    [ -e "$f" ] && echo
done | wc -l

要递归且可移植地对ls文件名末尾仅包含 2 位数字的文件进行计数和匹配,请执行以下操作:

ls ./ -aR1iqp |
grep -c '^ *[0-9].*[^0-9][0-9][0-9]$' 

要仅搜索当前目录,请执行以下操作:

ls ./.* ./* -ad1iqp |
grep -c '^ *[0-9].*[^0-9][0-9][0-9]$'

相关内容