[Bash] bouger un fichier s'il existe

Bonjour,
j’ai un léger problème : je parcoure un tableau contenant une liste d’extension, et pour chaque extension, je bouge tous les fichiers contenant ce nom dans un certain répertoire.
Seulement, si aucun n’a l’extension que je traite, il m’affiche un message d’erreur "mv: impossible d’évaluer « *.jpg »: Aucun fichier ou dossier de ce type"
le script tourne, mais c’est pas très agréable …

extension_image=('jpg' 'png' 'gif' 'bmp' 'svg') for extension in "${extension_image[@]}" do mv *.$extension $dossier_image done
Comment faire ? j’ai essayé de faire if [ -f “*.$extension” ], mais ça ne marche pas …
Glorf

Salut,

Envoyer les messages d’erreurs vers > /dev/null :slightly_smiling:

Re,

shopt -q nullglob && shopt -s nullglob || nullglob=-u

extension_image=('jpg' 'png' 'gif' 'bmp' 'svg')
for extension in "${extension_image[@]}"
do
   fichiers=( *.${extension} )
   (( ${#fichiers[@]} > 0 )) && mv "${fichiers[@]}" "${dossier_image}"
done
[ ${nullglob} ] && shopt ${nullglob} nullglob

Un petit 2 > /dev/null et c’est réglé, merci !

non, ce n’est pas propre : si l’instruction mv génère une erreur, tu ne comprendras pas pourquoi tes fichiers n’ont pas été déplacé.

fichiers=( *.${extension} ) (( ${#fichiers[@]} > 0 )) && mv "${fichiers[@]}" "${dossier_image}"
là on récupère dans fichiers la liste des fichiers avec l’extension, et on bouge si le tableau contient au moins une valeur ?
Mais c’est quoi comme syntaxe ?
et que fait ce code :

shopt -q nullglob && shopt -s nullglob || nullglob=-u [ ${nullglob} ] && shopt ${nullglob} nullglob

Tout d’abord, j’ai été un peu vite : ceci shopt -q nullglob && shopt -s nullglob || nullglob=-u est erroné et est à remplacer par shopt -q nullglob || { shopt -s nullglob; nullglob=-u ; }

qui signifie :
si l’option bash nullglob n’est pas activée alors on l’active et on affecte la valeur “-u” à la variable nullglob. la négation s’effectuant grace à || qui exécute l’instuction qui suit si l’instruction précédente a échouée.

l’option nullglob permet de dire à bash s’il doit retourner null si aucun fichiers ne correspond au pattern fourni.

pour [ ${nullglob} ] && shopt ${nullglob} nullglob cela signifie :
si la variable nullglob n’est pas null alors on désactive l’option nullglob.

l’objectif de ces 2 lignes est d’activer l’option nullglob (1ère ligne) puis de la repositionner dans son état initiale (2nde ligne) si il a été changé.