当文件夹中没有文件时,下面的脚本进入for循环。不知道我可以修改什么,以便它不会进入for循环。此外,当目录中没有文件时,退出状态应该是成功的。包装器脚本检查以下脚本的退出状态
FILESRAW ="/exp/test1/folder" .
for fspec in "$FILESRAW"/* ; do
echo "$fspec"
if [[ -f ${fspec} ]] ; then
..... processing logic
else
... processing logic
fi
done
答案 0 :(得分:3)
如果使用bash,
您可以设置nullglob
shopt-s nullglob
如果您有隐藏文件,
shopt -s dotglob
使用ksh,
#!/bin/ksh
set -o noglob
for file in /path/*
do
....
done
答案 1 :(得分:0)
for fspec in `dir $FILESRAW` ; do
答案 2 :(得分:0)
如果$ FILESRAW为空,则退出:
[ $( ls "$FILESRAW" | wc -l ) -eq 0 ] && exit 0
如果此测试在循环之前,如果$ FILESRAW为空,它将阻止执行到达for循环。
当$ FILESRAW为空时,“$ FILESRAW”/ *扩展为“/ exp / test1 / folder / *”,因为ghostdog74指出,你可以通过设置nullglob来改变这种行为
shopt -s nullglob
如果您想要隐藏文件,请同时设置dotglob:
shopt -s dotglob
或者,您可以使用ls而不是globing。这样做的好处是可以使用非常完整的目录(使用管道,您将无法达到最大参数限制):
ls "$FILESRAW" | while read file; do
echo "$file"
如果您想要隐藏文件,这会变得更加混乱,因为您需要排除。和......模仿全球行为:
ls -a "$FILESRAW" | egrep -v '^(\.|\.\.)$' | while read file; do
echo "$file"
答案 3 :(得分:0)
如果您使用的是ksh, 尝试将其放在for循环的前面,以免它进入其中。 “ 设置-noglob ” 甚至我也遇到了同样的问题,但是我能够通过这样做解决它。