[bash] - renommer - ajouter de façon récursif
Résolu/Fermé
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
-
5 juil. 2012 à 21:09
enyrix Messages postés 144 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 - 10 juil. 2012 à 02:43
enyrix Messages postés 144 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 - 10 juil. 2012 à 02:43
A voir également:
- Rename bash
- Lupas rename - Télécharger - Gestion de fichiers
- Bulk rename utility - Télécharger - Gestion de fichiers
- A-pdf rename - Télécharger - PDF
- Rename - Télécharger - Gestion de fichiers
- Bash permission non accordée - Forum Shell
7 réponses
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
Modifié par jisisv le 5/07/2012 à 22:55
Modifié par jisisv le 5/07/2012 à 22:55
Je viens de mettre de l'ordre dans mon répertoire de photos afin de n'avoir que des noms de fichiers propres (sans espaces, extensions minuscules...)
Si ta question est scolaire on pourra en reparler.
Si ta question est purement pratique, et que tu utilises une distribution digne de ce nom (Debian..), tu peux utiliser rename dans un filtre:
find . -iname '*JPG' -print0 | xargs --null rename 's!jpg$!JPG!i'
man find; man xargs; man rename
rename est fourni avec PERL sous Debian wheezy.
Un CONSEIL: fait l'inverse; sous Unix les noms de fichiers utilisateurs ont une extension en minuscules.
Le problème vient de certains systèmes propriétaires incohérents qui ne gèrent pas du tout la casse.
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
Si ta question est scolaire on pourra en reparler.
Si ta question est purement pratique, et que tu utilises une distribution digne de ce nom (Debian..), tu peux utiliser rename dans un filtre:
find . -iname '*JPG' -print0 | xargs --null rename 's!jpg$!JPG!i'
man find; man xargs; man rename
rename est fourni avec PERL sous Debian wheezy.
Un CONSEIL: fait l'inverse; sous Unix les noms de fichiers utilisateurs ont une extension en minuscules.
Le problème vient de certains systèmes propriétaires incohérents qui ne gèrent pas du tout la casse.
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
5 619
9 juil. 2012 à 16:39
9 juil. 2012 à 16:39
hello
change la casse uniquement dans le nom du fichier, enlever le -n pour effectuer. a tester avant.
change la casse uniquement dans le nom du fichier, enlever le -n pour effectuer. a tester avant.
$ rename -n 's+(^.*/)([^\.]*)(\.)+$1\U$2$3+' {} \; $(find . -iname "*.jpg") ./12c01.jpg renamed as ./12C01.jpg ./12bf5.JPG renamed as ./12BF5.JPG ./12bf0.jpg renamed as ./12BF0.jpg ./a/12c01.jpg renamed as ./a/12C01.jpg ./a/12bf5.JPG renamed as ./a/12BF5.JPG ./a/12bf0.jpg renamed as ./a/12BF0.jpg ./a/a/12c01.jpg renamed as ./a/a/12C01.jpg ./a/a/12bf5.JPG renamed as ./a/a/12BF5.JPG ./a/a/12bf0.jpg renamed as ./a/a/12BF0.jpg ./a/a/12a27.jpg renamed as ./a/a/12A27.jpg ./a/12a27.jpg renamed as ./a/12A27.jpg ./12a27.jpg renamed as ./12A27.jpg $
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
9 juil. 2012 à 08:40
9 juil. 2012 à 08:40
https://www.linuxquestions.org/questions/linux-software-2/change-case-of-a-string-toupper-in-shell-script-319736/
comme tr fait des opérations sur les fichiers, il faut ruser.
tr "[:upper:]" "[:lower:]"
comme tr fait des opérations sur les fichiers, il faut ruser.
for file in $(ls *.jpg *.JPG) do : mv $file $(echo $file |tr "[:upper:]" "[:lower:]") done
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
Modifié par enyrix le 9/07/2012 à 09:01
Modifié par enyrix le 9/07/2012 à 09:01
J,ai essayer de combiner la commande à ce que j'ai présentement...
Je voudrais renommer mes fichiers en majuscule mais en gardant l'extension en minuscule. C'est possible de combiner cela en une commande et de lexécuter?
J'aimerais utliser la commande mv pour pouvoir garder écraser au besoin ce que semble pas faire rename..
Partie 1
Partie 2
Je voudrais renommer mes fichiers en majuscule mais en gardant l'extension en minuscule. C'est possible de combiner cela en une commande et de lexécuter?
J'aimerais utliser la commande mv pour pouvoir garder écraser au besoin ce que semble pas faire rename..
Partie 1
find . -type f -name "*.jpg" | grep -v '.svn' | tr "[:lower:]" "[:upper:]"
Partie 2
find . -type f -name "*.jpg" | grep -v '.svn' | tr "[:lower:]" "[:upper:]" | sed 's/.*\.//' | tr "[:upper:]" "[:lower:]"
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
9 juil. 2012 à 09:57
9 juil. 2012 à 09:57
Salut,
$ ls -1 12a27.jpg 12bf0.jpg 12bf5.JPG 12c01.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.JPG $ ls -1 | sed 's/\([^.]*.\)\(.*\)/\U\1\L\2/' 12A27.jpg 12BF0.jpg 12BF5.jpg 12C01.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.jpg $
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
9 juil. 2012 à 10:00
9 juil. 2012 à 10:00
Je n'ai pas tout compris...
Le plus simple est de faire ce que je t'ai donné en premier, puis de faire l'inverse de ce que fait jisisv pour mettre les extensions en minuscule. Si tu veux vraiment le faire en une commande, il faut passer par basename, ou alors utiliser exec de find.
Le plus simple est de faire ce que je t'ai donné en premier, puis de faire l'inverse de ce que fait jisisv pour mettre les extensions en minuscule. Si tu veux vraiment le faire en une commande, il faut passer par basename, ou alors utiliser exec de find.
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
9 juil. 2012 à 10:05
9 juil. 2012 à 10:05
Étrange ça fais 4 fois que je commit un commentaire et que le site ne l'enregistre pas! Je m'essaie à nouveau !
Moi je voudrais pouvoir le faire sur tous les fichiers avec sous-dossiers inclus...
Moi je voudrais pouvoir le faire sur tous les fichiers avec sous-dossiers inclus...
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
9 juil. 2012 à 10:11
9 juil. 2012 à 10:11
Merci de votre support! Le viens de voir vos message, après un bug d'affichage et d'enregistrement sur le forum !
c'est exactement cela :
mais en incluant tous les fichiers dans tous les sous dossiers aussi (et ne pas renommer les dossiers et sous-dossiers, renommer que les fichiers)
Et aussi comment rendre cette comande exécutable ?
Ça me derange pas de devoir faire plusieurs lignes de commandes... pour arriver à mon résultat! C'est ce qui compte!
c'est exactement cela :
ls -1 | sed 's/\([^.]*.\)\(.*\)/\U\1\L\2/'
mais en incluant tous les fichiers dans tous les sous dossiers aussi (et ne pas renommer les dossiers et sous-dossiers, renommer que les fichiers)
Et aussi comment rendre cette comande exécutable ?
Ça me derange pas de devoir faire plusieurs lignes de commandes... pour arriver à mon résultat! C'est ce qui compte!
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
9 juil. 2012 à 09:55
9 juil. 2012 à 09:55
Étrange ça fais 3 fois que je commit un commentaire et que le site ne l'enregistre pas!
J'ai progressé dans mon code.. Présentement le problème c'est que ça tente de renommer aussi les dossiers même si j'ai mis l'argument -type f ... moi j'e veux renommer seulement les fichiers et ne pas toucher noms de dossiers et de sous-dossiers..
J'ai progressé dans mon code.. Présentement le problème c'est que ça tente de renommer aussi les dossiers même si j'ai mis l'argument -type f ... moi j'e veux renommer seulement les fichiers et ne pas toucher noms de dossiers et de sous-dossiers..
Efface tous les fichier et dossier .svn find . -name .svn -print0 | xargs -0 rm -rf Change tous les fichiers en majuscules for i in 'find . -type f'; do new_name='echo $i | tr '[a-z]' '[A-Z]''; mv $i $new_name ; done change uniquement tous les extensions de fichiers .JPG en minuscule (.jpg) find . -iname '*JPG' -print0 | xargs --null rename 's!JPG$!jpg!i'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
9 juil. 2012 à 10:21
9 juil. 2012 à 10:21
$ ls 11n_Setup.exe pilote_ralink_AWUS051NH.exe rep/ $ ls -1 rep/ 12a27.jpg 12bf0.jpg 12bf5.JPG 12c01.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.JPG $ find . -type f -iname '*jpg' -exec bash -c \ 'rep=$(dirname $1);name=$(basename $1);pref=${name%%.*};suff=${name##*.}; mv -v ${1} ${rep}/${pref^^}.${suff,,}' _ {} \; « ./rep/BB56.JPG » -> « ./rep/BB56.jpg » mv: « ./rep/AC09.jpg » et « ./rep/AC09.jpg » identifient le même fichier mv: « ./rep/AC05.jpg » et « ./rep/AC05.jpg » identifient le même fichier mv: « ./rep/ABFE.jpg » et « ./rep/ABFE.jpg » identifient le même fichier « ./rep/12a27.jpg » -> « ./rep/12A27.jpg » « ./rep/12c01.jpg » -> « ./rep/12C01.jpg » « ./rep/12bf5.JPG » -> « ./rep/12BF5.jpg » « ./rep/12bf0.jpg » -> « ./rep/12BF0.jpg » $ ls -1 rep/ 12A27.jpg 12BF0.jpg 12BF5.jpg 12C01.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.jpg $
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
9 juil. 2012 à 22:36
9 juil. 2012 à 22:36
Merci pour votre aide, malheureusement il semble qu'il y a eu un bug quand j'ai écrits des messages à plusieurs reprises mais qui disparaissait quand je rechargeait cette page. De plus, il y a eu un délais avant que je vois vos messages.. je répondais alors que vos messages était déjà là alors que je ne les voyais pas... étrange !
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné.. La voici:
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné.. La voici:
Efface tous les fichier et dossier .svn find . -name .svn -print0 | xargs -0 rm -rf Renomme tous les noms fichiers dans tous les dossiers et sous dossier avec extension .jpg ou .JPG en majuscule exemple: test.jpg -> TEST.JPG, test.JPG -> TEST.JPG & Ne renomme pas les dossiers et sous-dossiers rename 's+(^.*/)([^\.]*)(\.)+$1\U$2$3+' {} \; $(find . -iname "*.jpg") change uniquement tous les extensions de fichiers .JPG en minuscule (.jpg) find . -iname '*JPG' -print0 | xargs --null rename 's!JPG$!jpg!i' Forcer le commit de tous les fichiers dans un nouveau svn propre svn --force --depth infinity add . svn commit
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
9 juil. 2012 à 23:01
9 juil. 2012 à 23:01
TEST4 (envoie de ce commentaire mais sans le code)
Merci pour votre aide, malheureusement il semble qu'il y a eu un bug quand j'ai écrits des messages à plusieurs reprises mais qui disparaissait quand je rechargeait cette page. De plus, il y a eu un délais avant que je vois vos messages.. je répondais alors que vos messages était déjà là alors que je ne les voyais pas... étrange !
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné..
J'essaie d'écrire le code ici mais mon message est marqué comme envoyé mais ne s'affiche pas si je réactualise...
J'aurais bien voulu vous donner la solutions...
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
Merci pour votre aide, malheureusement il semble qu'il y a eu un bug quand j'ai écrits des messages à plusieurs reprises mais qui disparaissait quand je rechargeait cette page. De plus, il y a eu un délais avant que je vois vos messages.. je répondais alors que vos messages était déjà là alors que je ne les voyais pas... étrange !
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné..
J'essaie d'écrire le code ici mais mon message est marqué comme envoyé mais ne s'affiche pas si je réactualise...
J'aurais bien voulu vous donner la solutions...
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
9 juil. 2012 à 23:04
9 juil. 2012 à 23:04
Voici mon code que le forum veut pas prendre alors je l'ai copié sur le site:
https://pastebin.com/Z6tVLKYr
https://pastebin.com/Z6tVLKYr
enyrix
Messages postés
144
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
8
10 juil. 2012 à 02:43
10 juil. 2012 à 02:43
Merci à tous (jisisv, zipe31, dubcek, Char Snipeur) de m'avoir aidé même si c'étais pas trop évident! Affaire résolue!
Modifié par enyrix le 5/07/2012 à 23:14
C'est vraiment de minuscule à majuscule volontairement, c'est pour un besoin particulier même si c'est pas la norme!
En passant, moi c'est pour Ubuntu Server mais ça marche quand même ta commande, je l'ai testé. Ça reste générique!
Il y aurait moyen de modifier ta commande pour cibler que le nom du fichier, mais toujours en ciblant les fichier avec l'extension jpg ?
5 juil. 2012 à 23:39
6 juil. 2012 à 00:01
exemple:
12bf0.jpg 12bf5.JPG 12c01.jpg 12a27.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.JPG
doit donner:
12BF0.jpg 12BF5.jpg 12C01.jpg 12A27.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.jpg
9 juil. 2012 à 06:53