我正在尝试查找文件名中包含“_”的某些类型的文件的数量。
foreach txt ( 'ls *.txt')
set n=0
if(grep _ txt) then
@ n = n+1
endif
end
它不起作用,因为我的 if 语句不正确,但我不确定如何定义说如果 txt 文件的文件名中包含“_”,则将 n 加 1。
答案1
一种方法是使用 shell 的通配功能而不是使用 grep。
set n=0
foreach txt (*_*.txt)
@ n++
end
如果您出于其他原因需要,“if grep”的语法是:
if ( { grep -q _ $var } ) then
...
endif
(-q
告诉 grep 保持安静,不要打印任何内容。)
答案2
要获取具有特定字符的文件名的数量,请使用:
set n=`ls *.txt | fgrep -c _`
这将仅打印包含找到的字符的文件名,然后计算返回的条目数。在 tcsh 中,您需要在赋值前加上set
。
答案3
您可以find
结合使用该命令来获取名称中wc
带有 a 的文件的数量:_
set n=`find [path] -maxdepth 1 -name "*_*.txt" | wc -l`
替换[path]
为您要搜索的目录。