检查文件夹内容永远不会成功

检查文件夹内容永远不会成功

bash 脚本片段

folder="some folder's name"
a="$folder/"*".pdf"
if [ "$a" != "$folder"'/*.pdf' ]
then
    echo check
fi

从不打印check

我希望它能够打印check当且仅当有至少 1 个文件的名称以.pdf文件夹结尾$folder

echo $aecho "$folder"'/*.pdf'准确打印我期望它们打印的内容:如果*.pdf指定文件夹中至少有 1 个文件,则前者打印匹配的路径,否则打印后者打印的内容。后者始终打印指定的较旧名称与 串联/*.pdf

  1. 为什么 bash 会有这样的行为?
  2. 我该如何让它发挥作用?

答案1

该表达式"$folder/"*".pdf"将扩展到所有可能的以.pdf.
为什么?这*标志保留其特殊含义,即通配

虽然这个字符串"$folder"'/*.pdf'只是 2 个单独的字符串"$folder"和的串联'/*.pdf'
作为*用单引号括起来的符号 - it失去其特殊意义。


根据您的主要目标检查当前文件夹是否至少有一个.pdf文件并打印一些"pdf file found!"成功的短语:

if [ ! -z `find foldername -type f -name "*.pdf" -print -quit` ]; then 
    echo "pdf file found!"
fi

答案2

您的if语句不起作用,因为$a用双引号括起来的只是一个包含 a 的字符串*echo "$a"与进行比较echo $a)。如果删除双引号,if一旦有多个文件匹配,您的语句就会失败。

don_crissti 的链接有很好的解决方案。

相关内容