我想使用
计算目录下的文件数if [ `expr ls -l $data_dir/*_1.data | wc -l` == 1 ]
then
#blabla
fi
但是bash不断弹出语法错误。 我错过了吗?
感谢。
答案 0 :(得分:1)
使用普通shell:
if [ "$(exec find "$data_dir" -maxdepth 1 -mindepth 1 -name '*_1.data' | wc -l)" -eq 1 ]; then
...
fi
使用Bash:
shopt -s nullglob
FILES=("$data_dir"/*_1.data)
if [[ ${#FILES[@]} -eq 1 ]]; then
...
fi
答案 1 :(得分:0)
令人惊讶的是,没有好的方法来计算标准POSIX shell中目录中的文件数(可能是因为POSIX没有标准化文件系统的任何方面)。唯一可移植的方法是逐个计算:
count=0
for f in $data_dir/*_1.data; do
[ -f "$f" ] && count=$((count + 1))
done
if [ "$count" -eq 1 ]; then
...
fi
如果你愿意,你可以尽早摆脱for循环。如果您关心至少有一个文件,请在count
达到1后立即中断。如果您关心的只有一个文件,请在count
超过1时立即中断。
使用find
的大多数建议都依赖于-printf
扩展名来输出保证不含任何空格的字符串。所有其他方法都容易受到潜在文件名中的空格(或至少是换行符)的影响,从而使计数失真。