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é,


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.