A verificação do conteúdo da pasta nunca é bem-sucedida

0

O trecho de script bash

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

nunca imprime check .

Espero imprimir check se houver pelo menos um arquivo cujo nome termine em .pdf na pasta $folder .

echo $a e echo "$folder"'/*.pdf' imprimem exatamente o que eu esperava que eles imprimissem: O primeiro imprime os caminhos correspondentes se houver pelo menos 1% do arquivo*.pdf na pasta especificada e imprime o que o último imprime. Este último sempre imprime o nome da concatenação antiga especificada com /*.pdf .

  1. Por que o bash se comporta assim?
  2. Como faço para que funcione?
por UTF-8 23.10.2017 / 20:59

2 respostas

2

Esta expressão "$folder/"*".pdf" será expandida para todos os nomes de arquivo possíveis que terminem com .pdf .
Porquê? O sinal * mantém seu significado especial, ou seja, globbing .

Enquanto esta string "$folder"'/*.pdf' é apenas uma concatenação de 2 strings separadas "$folder" e '/*.pdf' .
Como * sinal entre aspas simples - < em> perde o seu significado especial.

De acordo com seu objetivo principal , verifique se a pasta atual tem pelo menos um .pdf arquivo e imprimindo uma frase "pdf file found!" no sucesso:

if [ ! -z 'find foldername -type f -name "*.pdf" -print -quit' ]; then 
    echo "pdf file found!"
fi
    
por 23.10.2017 / 21:19
1

Sua instrução if não funciona, porque $a entre aspas duplas é apenas uma string contendo um * (compare echo "$a" with echo $a ). Se você remover as aspas duplas, suas instruções if falharão assim que houver mais de um arquivo correspondente.

O link de don_crissti tem boas soluções.

    
por 23.10.2017 / 21:38

Tags