我有一个脚本,它会将html
文件下载到当前目录中。
然后它会根据这些文件生成报告html
。
最后,它会删除所有这些html
文件。因此,当我运行此脚本时,我想确保当前目录中
没有文件。html
这是我得到的:
if ls *.html >/dev/null 2>&1; then
echo 'clear HTML files first'
exit
fi
有没有什么简单的方法可以检查?
答案1
使用故障全局选项;检查任何匹配项:
if (shopt -s failglob; true *.html) 2>/dev/null; then
echo "Found files"
fi
使用空值和数组;计算文件数量:
numfiles=$( shopt -s nullglob; files=(*.html); echo ${#files[@]} )
if (( numfiles > 0 )); then
echo "Have $numfiles HTML files"
else
echo "No files"
fi
另一种方法,不使用空值或丢弃$files
:
files=(*.html)
if [[ -e ${files[0]} ]]; then
numfiles=${#files[@]}
echo "$numfiles files found"
fi
使用空值对于整个脚本来说——在某些情况下可能还可以,在其他情况下则不好:
#!/usr/bin/env bash
shopt -s nullglob
...
files=(*.html)
numfiles=${#files[@]}
答案2
计算 HTML 数量文件(不是文件夹、符号链接等)在当前目录中,如果大于零,则中止:
if [[ $( find . -maxdepth 1 -type f -name "*.html" | wc -l ) -gt 0 ]] ; then
echo "Oh no, there are HTML files!" >&2
exit 1
fi
答案3
for i in *.html
do
if [ -f "$i" ]
then
echo "Cannot run, html files in current directory"
exit 1
fi
done