for f in ~/1/2/*/*_1.txt; do
file_without_path="${f##*/}"
exptool input1= "${file_without_path}" input2= "${file_without_pathf%_1.txt}_2.txt"
done
Eu tenho 2 arquivos cada em subdiretórios user / admin / 1/2 / [a-c].
Os arquivos são preQC_1.txt e preQC_2.txt - ambos serão entradas na minha ferramenta.
Eu uso "$ {f ## * /}" para preQC_1.txt no meu loop
for f in ~/1/2/*/*_1.txt; do exptool input1= "${f##*/}" input2= "{$f%_1.txt}_2.txt"
Meu programa diz que o arquivo '{$ f% _1.txt} _2.txt' e estou 100% certo de que estou incorretamente usando a expansão de parâmetro. Para input2, como posso ter certeza de que estou recebendo apenas o 'preQC_2.txt' (nome do arquivo + extensão sem a listagem do diretório)?
EDIT: Eu tentei combinar "$ {f ## * /}" e {$ f% _1.txt} _2.txt "mas isso realmente se expande para 'user / admin / 1/2 / a / preQC_1. txt_2.txt '
Você acabou de cometer um erro de sintaxe: escreveu "{$f%_1.txt}_2.txt"
enquanto o formulário correto é "${f%_1.txt}_2.txt"
(você perdeu o caractere $
).
:)
Edit: woops, eu entendi errado, porque no bloco "${f%_1.txt}_2.txt"
, o valor de f
ainda é user/admin/1/2/a/preQC_1.txt
então basicamente o valor de "${f%_1.txt}_2.txt"
é user/admin/1/2/a/preQC_2.txt
, o que não é o que você deseja. >
Eu recomendaria a atualização do valor de f
, como
for f in ~/1/2/*/*_1.txt
f=${f##*/}
do exptool input1= "$f" input2= "${f%_1.txt}_2.txt"
done
que praticamente se junta à resposta de Hauke Laging.