Premier match dans le wildcard linux

2

J'ai la partie ci-dessous dans mon 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

Cette méthode utilise un caractère générique qui pose certains problèmes.

Donc, si j'ai 7AB.115.2 dans le fichier $ images_to_remove:

Et dans le répertoire où il se trouve a:

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

Il déplace également les 3 autres dossiers car 7AB.115.2 est une option valide basée sur le caractère générique "$ file" .

Comment puis-je m'assurer que le caractère générique utilise uniquement la première correspondance trouvée et s'arrête après?

Merci.

À votre santé,

Joao
la source
Vous ne pouvez probablement pas. Utilisez find … -exec … -quitou si.
Kamil Maciorowski

Réponses:

1

Comment puis-je m'assurer que le caractère générique utilise uniquement la première correspondance trouvée et s'arrête après?

Pour ne déplacer que le premier fichier trouvé, remplacez:

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

Avec:

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

break provoque la fermeture de la boucle après le premier fichier.

Nous avons également ajouté des guillemets autour des variables currentimageset du oldimagesshell pour empêcher le fractionnement des mots.

John1024
la source