我正在使用这段代码:
numbzip=`ls *.plt.zip | wc -l` &>/dev/null
并尝试删除命令窗口中的输出。
不存在以 .plt.zip 结尾的文件,因此它返回:
ls: cannot access *.plt.zip: No such file or directory
无论我尝试什么,它总是在命令窗口中写入这一行。
我试过:
numbzip=`ls *.plt.zip | wc -l` >/dev/null 2>/dev/null
numbzip=`ls *.plt.zip | wc -l` >/dev/null >>/dev/null 2>/dev/null
问候,威尔科。
答案1
您不应该解析 的输出ls
。而是使用查找
numbzip=$(find -iname "*.zip" | wc -l)
echo $numzip
答案2
您不断看到该消息是因为您重定向了错误的内容:
numbzip=`ls *.plt.zip | wc -l` &>/dev/null
这会重定向变量赋值的 stderr,而不是命令的 stderr ls
。您在ls
内部运行``
并在外部重定向。要重定向 的错误输出ls
,请使用:
numbzip=`ls *.plt.zip 2>/dev/null | wc -l`
也就是说,虽然上面的方法适用于简单的文件名,但如果您的文件名包含换行符,则会失败。作为一般规则,您应该避免解析输出ls
。您可以使用 shell 通配符来代替:
zipfiles=( *.plt.zip )
echo ${#zipfiles[@]}
第一个命令将创建一个zipfiles
数组,其内容是与 glob 匹配的所有文件/目录*.plt.zip
。第二行打印数组中元素的数量。