For loop não pode distinguir * sintaxe

0
set -x 
for f in ~/1/2/*/*_1.txt; do
subdir="${f%/*}"
pushd "$subdir" &>/dev/null
file="${f##*/}"

expTool INPUT1= "${f##*/}" INPUT2= "${f%_1.txt}_2.txt OUTPUT1= "${f%_1.txt}_3.txt" OUTPUT2= "${f%_2.txt}_4.txt"
done

expTool error: [Errno 2] No such file or directory: '*_1.txt'

Eu subtraí as citações, mas foi um não ir.

EDIT: com set -x

+for f in '/User/admin/1/2/*/*_1.txt'
+subdir='/User/admin/1/2/*'
+pushd '/User/admin/1/2/*'
+file='*_1.txt'
+expTool INPUT= '*_1.txt' OUTPUT= '${f%_1.txt}_2.txt'

Portanto, parece que a sintaxe '*' não está sendo registrada como curinga (?). Estou usando o Mac OSX 10.8.6.

    
por ozarka 04.02.2016 / 01:04

2 respostas

1

Você executou set -f anteriormente no script, o que desativa a expansão de curingas ou não há arquivos correspondentes. Se não houver arquivos correspondentes, o padrão será mantido inalterado, portanto, o loop for será executado em um elemento que é o padrão inalterado. No bash, você pode usar shopt -s nullglob para fazer com que padrões não correspondentes sejam expandidos para a lista vazia.

    
por 06.02.2016 / 02:26
0

não sei se entendi o seu código

for f in ~/1/2/*/*_1.txt; do
  fdn="${f%/*}"
  fbn1="${f##*/}"
  fbn2="${fbn1//_1/_2}"
  fbn3="${fbn1//_1/_3}"
  fbn4="${fbn1//_1/_4}"
  expTool INPUT1= "$fdn/$fbn1" INPUT2= "$fdn/$fbn2" OUTPUT1= "$fdn/$fbn3" OUTPUT2= "$fdn/$fbn4"
done

se eu for toppic, por favor me avise, eu excluo minha resposta!

    
por 04.02.2016 / 21:22