Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/11/2019, à 23:17

Crestey

Généralisation d'une commande find qui ne marche pas

Bonjour,
Je souhaite renommer en masse des photos
Pour les extensions, j'ai la commande suivante qui change JPG en jpg dans l'arborescence. Ça marche bien:
find -name '*.JPG' -exec bash -c 'mv "{}" "`echo {} | sed "s/.JPG/.jpg/"`" ' \;

J'ai voulu en faire une fonction pour généralisé et passer "JPG" "jpg" en paramètres. (Pour l'appliquer ensuite sur "JPEG" "jpg", "AVI" "avi", etc ...)
Mais ça ne marche pas et je ne comprends pas pourquoi.

#!/bin/bash

# Pour changer JPG en jpg la commande est : 
# find -name '*.JPG' -exec bash -c 'mv "{}" "`echo {} | sed "s/.JPG/.jpg/"`" ' \;
# Du coup on en fait une fonction. La fonction renext()

renext() 
{ 
  find -name '*.$1' -exec bash -c 'mv "{}" "`echo {} | sed "s/.$1/.$2/"`" ' \; 
}

renext "JPG" "jpg"
renext "jpeg" "jpg"
renext "JPEG" "jpg"
renext "AVI" "avi"
renext "MOV" "mov"
renext "MP4" "mp4"

Pourriez-vous m'aider et me dire ce qui bloque SVP ?

Dernière modification par Crestey (Le 04/11/2019, à 23:18)


Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.

Hors ligne

#2 Le 05/11/2019, à 01:03

Hizoka

Re : Généralisation d'une commande find qui ne marche pas

Salut,

pas très propre ton histoire...

rename -n 's/.JPG$/.jpg/' *.JPG

Si le résultat te convient, tu vires -n.


Et je voulais proposer les commandes suivantes mais ça ne passe pas, il faudra y réfléchir avec les idées claires smile

function Renommage
{
    rename -n "s/.${1^^}$/.${1,,}/" *.${1^^}
}

Renommage jpg
Renommage JpG
Renommage JPG
...

${1^^} : ta variable en majuscule
${1,,} : ta variable en minuscule

et si tu es sûr du format de tes extensions :

function Renommage
{
    rename -n "s/.${1}$/.${1}/" *.${1}
}

Renommage JPG jpg

Dernière modification par Hizoka (Le 05/11/2019, à 01:09)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 05/11/2019, à 09:33

Crestey

Re : Généralisation d'une commande find qui ne marche pas

Merci Hisoka,
En fait, j'avais bien vu qu'il existait une fonction rename plus adaptée à cet exercice en particulier.
Mais ma question est plus générale.
Je voudrais comprendre pourquoi mon passage de paramètre ne fonctionne pas avec la commande find, et comment y remédier. (ça m'aidera pour la suite).
Quelle doit être la syntaxe (je suis très débutant en script) ?
Que dois-je mettre autour de mes $1 et $2 pour que ça passe ?
Merci encore

Dernière modification par Crestey (Le 05/11/2019, à 09:35)


Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.

Hors ligne

#4 Le 05/11/2019, à 09:49

pingouinux

Re : Généralisation d'une commande find qui ne marche pas

Bonjour,
En reprenant des idées en #1 et #2, pour transformer tous les fichiers *.jPg, *.JPG, jPG etc… en *.jpg :

renext()
{ 
  find -iname "*.$1" -exec bash -c 'nom="{}";SUF=${nom##*.};suf=${SUF,,};rename -n "s/$SUF$/$suf/" "$nom"' \;
}

renext "jpg"

Si c'est bon, enlever -n après rename.

Ajouté :
Ou plus simple

renext()
{
  shopt -s nocaseglob
  for nom in *."$1"
  do
    suf=${nom##*.}
    rename -n "s/.$suf$/$1/" "$nom" 
  done
}

renext "jpg"

Dernière modification par pingouinux (Le 05/11/2019, à 10:04)

Hors ligne

#5 Le 05/11/2019, à 10:05

Hizoka

Re : Généralisation d'une commande find qui ne marche pas

renext()
{
    while read Fichier
    do
        mv "${Fichier}" "${Fichier%.*}".${2}
    done < <(find -iname "*.${1}")
}

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 05/11/2019, à 12:52

Watael

Re : Généralisation d'une commande find qui ne marche pas

mais... et si le nom d'un fichier comporte un/des espace(s) ?

@Crestey
regarde ça :

var=gabuzomeuh
echo '$var'
echo "$var"

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 05/11/2019, à 14:39

Crestey

Re : Généralisation d'une commande find qui ne marche pas

Merci à vous ! je vais potasser tous ça.
zomeuhmeuhmeuh mercis ! (1000 mercis en shadock wink )


Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.

Hors ligne