如何计算名称中包含元音的文件数
How to count the number of files whose name contains a vowel
我试图编写一个脚本来计算目录中带有元音字母的文件的数量。
如果我使用
find -type f | wc -l
我得到目录 $1 中的文件数,但我不知道如何使用 grep 来计算带有元音的文件,我正在尝试这样的事情
find -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
-iname '*[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 -type f | grep -i '[aeiouy]' | wc -l
您的尝试失败有两个原因。首先,如果 grep 在管道中读取,-l
没有意义,因为 -l
的目的是只打印匹配的输入文件,但在这种情况下,唯一的输入文件是标准输入。其次,你的语法错误。尝试:
... | grep -i '[aeiou]' | ...
请不要在字符组表达式中使用逗号([]
括号中的东西)
最好的方法是先执行 find(1)
以获取要扫描的文件。然后您需要基本名称,因为路径信息无效。最后需要用[aeiouAEIOU]
grep 只得到有元音的行,最后用wc(1)
统计行数。
find ${DIRECTORY} -type f -print | sed -e 's@^.*/@@' | grep '[aeiouAEIOU]' | wc -l
-type f
允许您 select 仅文件(而非目录)。 sed(1)
命令逐行编辑输出,删除名称的第一部分直到最后一个 /
字符。 grep 过滤名称至少包含一个元音字母并丢弃其他字母,最后 wc -l
计算行数。
我试图编写一个脚本来计算目录中带有元音字母的文件的数量。
如果我使用
find -type f | wc -l
我得到目录 $1 中的文件数,但我不知道如何使用 grep 来计算带有元音的文件,我正在尝试这样的事情
find -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
-iname '*[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 -type f | grep -i '[aeiouy]' | wc -l
您的尝试失败有两个原因。首先,如果 grep 在管道中读取,-l
没有意义,因为 -l
的目的是只打印匹配的输入文件,但在这种情况下,唯一的输入文件是标准输入。其次,你的语法错误。尝试:
... | grep -i '[aeiou]' | ...
请不要在字符组表达式中使用逗号([]
括号中的东西)
最好的方法是先执行 find(1)
以获取要扫描的文件。然后您需要基本名称,因为路径信息无效。最后需要用[aeiouAEIOU]
grep 只得到有元音的行,最后用wc(1)
统计行数。
find ${DIRECTORY} -type f -print | sed -e 's@^.*/@@' | grep '[aeiouAEIOU]' | wc -l
-type f
允许您 select 仅文件(而非目录)。 sed(1)
命令逐行编辑输出,删除名称的第一部分直到最后一个 /
字符。 grep 过滤名称至少包含一个元音字母并丢弃其他字母,最后 wc -l
计算行数。