gkm*_*hit 7 shell wildcards files
如何检查文件是否有扩展名为 .java 的文件?
到目前为止,我有:
for javaFile in *.java ; do
{
echo "The file $javaFile has : " >> ~/Desktop/externalServers.txt
grep -E '^[^/]{2}.*http' $javaFile >> ~/Desktop/externalServers.txt
grep -E '^[^/]{2}.*ftp' $javaFile >> ~/Desktop/externalServers.txt
echo "----------------------------------------" >> ~/Desktop/externalServers.txt
sed -e "s/[[:space:]]\+/ /g" ~/Desktop/externalServers.txt >> ~/Desktop/externalServersTemp.txt
rm ~/Desktop/externalServers.txt
mv ~/Desktop/externalServersTemp.txt ~/Desktop/externalServers.txt
sed 's/^\n//' ~/Desktop/externalServers.txt >> ~/Desktop/externalServersTemp.txt
rm ~/Desktop/externalServers.txt
mv ~/Desktop/externalServersTemp.txt ~/Desktop/externalServers.txt
} done
Run Code Online (Sandbox Code Playgroud)
但是每次我这样做时,我都会收到错误消息:
grep: *.java: 没有那个文件或目录
基本上我想首先查看文件夹是否有任何 .java 类型的文件,然后只继续执行脚本。
在 Bash 中,只需使用
shopt -s nullglob
for pdfFile in *.java;do
# your code goes here
done
Run Code Online (Sandbox Code Playgroud)
此语法适用于类似 Bourne 的 shell;该nullglob选项特定于 bash。您使用的大括号 ( {}) 适用于 C 样式 shell。
shopt -s nullglob设置该nullglob选项,它基本上告诉 Bash 未能匹配的 glob 应该扩展为空字符串。默认情况下,如果*.java无法匹配,则会将其扩展为自身(星号保留)。