Primeira correspondência no wildcard linux

2

Eu tenho a parte abaixo no meu script bash:

for file in $(cat $csmtdirpath/$images_to_remove); do mv -v -f /$currentimages/*"$file"* $oldimages >> "$log_image_to_move" 2>> "$log_images_to_move_error"; done

Este método está usando um curinga que está causando alguns problemas.

Então, se eu tiver 7AB.115.2 no arquivo $ images_to_remove:

E no diretório em que aparece:

  1. 7AB.115.2.1diudniwqndiqnwd
  2. 7AB.115.2.2ewfnweofnowenfwef
  3. 7AB.115.2.3fewklfkwemfkpwemfpkmw

Ele também move as outras 3 pastas porque 7AB.115.2 é uma opção válida com base no "$ file" curinga.

Como posso ter certeza de que o curinga use apenas a primeira correspondência encontrada e pare depois?

Obrigado.

Felicidades,

    
por Joao 05.09.2017 / 20:03

1 resposta

1

How can I make sure that the wildcard only uses the first found match and stops after?

Para mover apenas o primeiro arquivo encontrado, substitua:

mv -v -f /$currentimages/*"$file"* $oldimages

Com:

for f in "/$currentimages/"*"$file"*
do
    mv -v -f "$f" "$oldimages"
    break
done

break faz com que o loop saia após o primeiro arquivo.

Além disso, adicionamos citações em torno das variáveis currentimages e oldimages shell para impedir a divisão de palavras.

    
por 05.09.2017 / 20:41

Tags