我目前正在运行一个脚本(check_files.sh),该脚本可能会也可能不会生成match *文件(例如match1.txt,match2.txt等。然后我想继续在生成的脚本上运行R脚本匹配*文件。
但是,在运行R脚本之前,我在脚本中尝试了一行来检查文件是否存在。
if [ -s match* ]
then
for f in match*
do
Rscript --vanilla format_matches.R ${f}
rm match*
done
else
echo "No matches present"
fi
但是,我不断收到错误消息(因为通常会生成很多匹配文件):
./check_files.sh: line 52: [: too many arguments
是否有[-s match *]的替代方法,它不会抛出错误消息?我认为出现了错误消息,因为生成了多个匹配*文件。
答案 0 :(得分:2)
您可以将逻辑更改为以下内容:
found=0
for f in match*; do
[ -e "$f" ] || continue
found=1
Rscript --vanilla format_matches.R "$f"
rm "$f"
done
if [ "$found" -eq 0 ]; then
>&2 echo "No matches present"
fi
答案 1 :(得分:2)
如果您希望文件名包含空格,这有点难看但很强大:
found=0
find -maxdepth 1 -type f -name 'match*' -print0 | while IFS= read -rd $'\0' f
do
found=1
Rscript --vanilla format_matches.R "$f"
rm "$f"
done
if [ "$found" -eq 0 ]; then
>&2 echo "No matches present"
fi
答案 2 :(得分:0)
是否有[-s match *]的替代方法,它不会抛出错误消息?
以下适用于我的示例文件match1.txt
if [ -f ~/match* ]; then
echo "yeha"
fi