如果一个名为“output”的文件已经存在,而不是一个目录,则该脚本 应显示错误并退出。
这是我到目前为止的代码
for file in *
do
if [ ! -f output ]
then echo "error"
exit 1
fi
done
答案 0 :(得分:0)
for file in *; do
if [ "$file" = "output" -a -f "$file" ]; then
echo "error"
exit 1
fi
done
或者
for file in *; do
if [ "$file" = "output" ] && [ -f "$file" ]; then
echo "error"
exit 1
fi
done
使用bash
,这是首选:
for file in *; do
if [[ $file == output && -f $file ]]; then
echo "error"
exit 1
fi
done
如果你想检查文件名是否包含这个词,不只是完全匹配它:
for file in *; do
if [[ $file == *output* && -f $file ]]; then
echo "error"
exit 1
fi
done
答案 1 :(得分:0)
为什么我们要处理子目录中的每个文件?很奇怪。
if [ -f output ]; then
echo "'output exists and is a file"
exit 1
fi
test命令(也是[
)(也是内置到大多数shell(参见bash手册页)),仅当输出是文件时才会对TRUE
响应-f output
响应。您可以检查它是否是-d
的目录。
touch something
if [ -f something ]; then echo "something is a file"; fi
if [ -d something ]; then echo "something is not a file"; fi
rm something
mkdir something
if [ -f something ]; then echo "something is not a subdir"; fi
if [ -d something ]; then echo "something is a subdir"; fi
rmdir something
如果您尝试这些命令,您将获得:
something is a file
something is a subdir
如果您只是查看特定文件/目录是否存在,则无需迭代整个目录内容。