Linux 如何计算名称中包含元音的文件数

Linux 如何计算名称中包含元音的文件数,linux,bash,shell,unix,scripting,Linux,Bash,Shell,Unix,Scripting,我试图编写一个脚本,计算目录中带有元音的文件数 如果我使用 find $1 -type f | wc -l 我得到目录$1中的文件数,但我不知道如何使用grep来计算只有元音的文件数,我正在尝试类似的方法 find $1 -type f | grep -l '[a,e,i,o,u,A,E,I,O,U]' | wc -l 您可以使用此gnu find命令对至少有一个元音的所有文件进行计数: find . -maxdepth 1 -type f -iname '*[aeiou]*' -print

我试图编写一个脚本,计算目录中带有元音的文件数

如果我使用

find $1 -type f | wc -l
我得到目录$1中的文件数,但我不知道如何使用grep来计算只有元音的文件数,我正在尝试类似的方法

find $1 -type f | grep -l '[a,e,i,o,u,A,E,I,O,U]' | wc -l
您可以使用此gnu find命令对至少有一个元音的所有文件进行计数:

find . -maxdepth 1 -type f -iname '*[aeiou]*' -printf ".\n" | wc -l
-在名称'*[aeiou]*'中,glob模式将只匹配至少带有a、e、i、o、u忽略大小写之一的文件名

Remove-maxdepth 1,如果您还想递归地计算子目录中的文件。

您可以使用此gnu find命令来计算至少有一个元音的所有文件:

find . -maxdepth 1 -type f -iname '*[aeiou]*' -printf ".\n" | wc -l
-在名称'*[aeiou]*'中,glob模式将只匹配至少带有a、e、i、o、u忽略大小写之一的文件名


如果要在子目录中递归计数文件,请删除-maxdepth 1。

如果可以接受计数目录:

ls -d *a* *e* *i* *o* *u* *y* *A* *E* *I* *O* *U* *Y* | wc -l
否则:

find $1 -type f | grep -i '[aeiouy]' | wc -l

如果您可以接受计数目录:

ls -d *a* *e* *i* *o* *u* *y* *A* *E* *I* *O* *U* *Y* | wc -l
否则:

find $1 -type f | grep -i '[aeiouy]' | wc -l

你的尝试失败有两个原因。首先,如果grep正在管道中读取,-l没有意义,因为-l的目的是只打印匹配的输入文件,但在这种情况下,唯一的输入文件是stdin。第二,你的语法是错误的。尝试:

... | grep -i '[aeiou]' | ...

你的尝试失败有两个原因。首先,如果grep正在管道中读取,-l没有意义,因为-l的目的是只打印匹配的输入文件,但在这种情况下,唯一的输入文件是stdin。第二,你的语法是错误的。尝试:

... | grep -i '[aeiou]' | ...

请不要在字符组表达式中使用逗号[]括号中的内容

最好的方法是首先进行find1以获取要扫描的文件。然后需要基本名称,因为路径信息无效。最后,您需要使用[aeiouAEIOU]进行grep,以仅获取中有元音的行,最后使用wc1来计算行数

find ${DIRECTORY} -type f -print | sed -e 's@^.*/@@' | grep '[aeiouAEIOU]' | wc -l

-类型f允许您仅选择文件而不是目录。sed1命令逐行编辑输出,删除名称的第一部分直到最后一个/字符。grep过滤至少有一个元音的名称,并丢弃其他元音,最后wc-l计算行数。

请不要在字符组表达式中使用逗号[]括号中的内容

最好的方法是首先进行find1以获取要扫描的文件。然后需要基本名称,因为路径信息无效。最后,您需要使用[aeiouAEIOU]进行grep,以仅获取中有元音的行,最后使用wc1来计算行数

find ${DIRECTORY} -type f -print | sed -e 's@^.*/@@' | grep '[aeiouAEIOU]' | wc -l

-类型f允许您仅选择文件而不是目录。sed1命令逐行编辑输出,删除名称的第一部分直到最后一个/字符。grep过滤至少有一个元音的名字,并丢弃其他元音,最后wc-l统计行数。

也称为ls-d*[aeiouAEIOU]*我省略了规范中没有的y。也称为ls-d*[aeiouAEIOU]*我省略了规范中没有的y。您的问题是关于一个目录,但是find命令将遍历它的所有子目录。如果不是这样的话,可以添加-maxdepth 1。您的问题是关于一个目录,但是find命令将遍历它的所有子目录。如果不是您的意图,可以添加-maxdepth 1。sed | grep是一个。grep | wc-l也是一种反模式。我一直在阅读该链接,并对该页面发表了自己的评论。不要盲目地遵循那里的建议,因为不是所有的grep都支持-c选项,也不是所有的grep都支持编辑。unix最古老的功能是让程序做一些小事情,但做得很好。如果你按照那一页,为什么不使用perl1呢?也谢谢你的否决票。塞德·格雷普是一位候选人。grep | wc-l也是一种反模式。我一直在阅读该链接,并对该页面发表了自己的评论。不要盲目地遵循那里的建议,因为不是所有的grep都支持-c选项,也不是所有的grep都支持编辑。unix最古老的功能是让程序做一些小事情,但做得很好。如果你按照那一页,为什么不使用perl1呢?谢谢你的否决票。