Besoin d'aide pour un script shell [Fermé]

Signaler
Messages postés
73
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
9 septembre 2009
-
Messages postés
29587
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 février 2021
-
Bonjour,

Bonjour,

Je ne sais pas comment donner un titre à mon sujet, désolé mais je vais essayer de vous expliquer!

Voilà, j'ai des sous repertoires qui contiennent des fichiers .exe, dans chaque sous repertoire.

exp: /toto/titi/tata/
dans toto, titi et tata, se trouvent des fichiers .exe

j'aimerai renomer ces fichiers en .txt.

Si j'avais des fichiers .exe uniquement par exemple dans /toto/titi/tata/*.exe, la solution est facile, faire juste:

#!/bin/sh
for i in /toto/titi/tata/*.exe
do
mv $i `basename $i .exe`.txt
done
exit0

sauf que je ne sais pas comment faire pour parcourir tous les repertoir et trouver ces fichiers pour ensuite les renommer.
J'ai pensé à find puis pipe |, mais je n'ai pas d'idée pour la syntaxe

Merci pour votre aide, je suis un débutant sur linux et le shell

2 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 838
Salut,
[tmpfs]$ tree
.
`-- toto
    |-- fich1.exe
    |-- fich2.exe
    |-- fich3.exe
    `-- titi
        |-- fich4.exe
        |-- fich5.exe
        |-- fich6.exe
        `-- tata
            |-- fich7.exe
            |-- fich8.exe
            `-- fich9.exe

3 directories, 9 files
[tmpfs]$ find . -name '*.exe' -print0 | while read -r -d $'\0' fich; do
mv -- "$fich" "${fich%.exe}.txt"
done
[tmpfs]$ tree
.
`-- toto
    |-- fich1.txt
    |-- fich2.txt
    |-- fich3.txt
    `-- titi
        |-- fich4.txt
        |-- fich5.txt
        |-- fich6.txt
        `-- tata
            |-- fich7.txt
            |-- fich8.txt
            `-- fich9.txt

3 directories, 9 files
[tmpfs]$ 
;-))
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
29587
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 février 2021
7 033
basename ne fait pas ce que tu crois, ça ne garde que le nom du fichier (par exemple /plop/pouet/tapir.exe devient tapir.exe). Dans ton cas tu peux t'inspirer de ça :
http://blog.lecacheur.com/2004/12/01/shell-supprimer-les-extensions-de-fichiers-en-masse/

En arrangeant un peu le code ça donne :
find * | grep "\.exe$" | sed 's/\(.*\)\.\([^\.]*\)/mv \1\.\2 \1.txt/g' | sh

Bonne chance
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci