loop no arquivo com extensão específica em um script de shell de pasta filho

0

Eu tenho um script no meu mac onde estou tentando fazer um loop nos arquivos txt dentro de uma subpasta da minha localização atual. Isso é myscript.sh :

cd /Users/Desktop/
for entry in $(pwd)/txt/*.txt 
do 
echo $entry
done

isto imprime uma string do caminho incluindo *txt como /Users/Desktop/txt/*.txt Eu quero fazer um loop nos arquivos .txt, então espero que echo $entry imprima os nomes dos arquivos txt, mas em vez disso imprima /Users/Desktop/txt/*.txt

    
por Tak 30.03.2017 / 10:27

1 resposta

2

Quando você fornece ao shell um padrão de globbing que não corresponde a nenhum nome de arquivo, o padrão de globbing não será expandido. No seu caso, isso significa que o echo no loop produz o próprio padrão.

Implementação alternativa do seu script:

cd /Users/Desktop || exit 1

for entry in txt/*.txt; do 
    test -e "$entry" && echo "$entry"
done

Esta implementação sairá com um código de saída diferente de zero se o cd falhar. Em seguida, não usará pwd , já que é desnecessário. Ele obterá uma lista de nomes que correspondem ao padrão e iterará sobre eles. Em cada iteração, ele testa para certificar-se de que há realmente algo no sistema de arquivos que possui esse nome antes de gerar o nome para a saída padrão.

Se você quiser que o echo dentro do lop produza o caminho completo dos arquivos, use echo "/Users/Desktop/$entry" , ou melhor:

dir="/Users/Desktop"
cd "$dir" || exit 1

for entry in txt/*.txt; do 
    test -e "$entry" && printf '%s/%s\n' "$dir" "$entry"
done
    
por 30.03.2017 / 10:33