我正在尝试测试特定目录中.doc文件的存在。
if [ ! -f /home/ankur/*.doc ]
then echo "no doc files exist."
else echo "files exist"
fi
现在如果不存在doc文件或单个doc文件,它可以正常工作。 但是如果有多个doc文件,它仍然可以工作但是会发出一些警告"太多的参数"。 那么如何测试多个doc文件的存在。感谢
答案 0 :(得分:2)
在您的评论中,您可以扩展原始问题,说:
我想要的是,它检查文件并最终产生一个结果。如果没有doc文件那么"不存在doc文件"或者如果有一个或多个文件,则存在" doc文件"
很大程度上取决于你的shell。使用Bash,您可以使用计数器来确定您是否找到了任何匹配的文件。例如:
files=(/home/ankur/*.doc)
files_found=0
for file in "${files[@]}"; do
[[ -f "$file" ]] && files_found+=1
done
if [[ $files_found == 0 ]]; then
echo "no doc files exist"
else
echo "files exist"
fi
关键是使用数组来存储文件名,并一次循环测试一个文件名。然后检查 files_found 变量以查看是否有任何匹配。它适用于我。
答案 1 :(得分:2)
shopt -s nullglob # if a glob pattern matches no files,
# do NOT return the pattern as a plain string,
files=( /path/to/*.doc )
if (( ${#files[@]} == 0 )); then
echo "no doc files there"
fi
答案 2 :(得分:1)
如果您只查看天气文件是否存在,那么我猜您应该避免这种麻烦:
你可以简单地做
#!/bin/bash
ls -l /home/ankur/*.doc &>/dev/null
if [[ $? -ne 0 ]]; then
echo "no doc files exist."
else
echo "files exist"
fi
还可以使用以下if
if ls home/ankur/*.doc &>/dev/null; then
echo "files exist"
else
echo "no doc files exist."
fi
为什么要从睡梦中唤醒阵列,如果你不想做任何与他们有关的事情:)