检查文件夹是否存在某种类型的文件

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 类型的文件,然后只继续执行脚本。

Jos*_* R. 4

在 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无法匹配,则会将其扩展为自身(星号保留)。

  • @Unknown 好吧,如果你使用的是 Bash,则不能。它在语法上是不正确的。 (3认同)