Je veux parcourir récursivement un répertoire et changer l'extension de tous les fichiers d'une certaine extension, par exemple .t1
à .t2
. Quelle est la commande bash pour faire cela?
Si vous avez renommé, utilisez:
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' \;
Si renommer n'est pas disponible, utilisez:
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' \;
Si votre version de bash
prend en charge l'option globstar
(version 4 ou ultérieure):
shopt -s globstar
for f in **/*.t1; do
mv "$f" "${f%.t1}.t2"
done
Ou vous pouvez simplement installer la commande mmv
et faire:
mmv '*.t1' '#1.t2'
Ici #1
est la première partie glob, c’est-à-dire le *
dans *.t1
.
Ou bien, dans le pur style bash, un moyen simple serait:
for f in *.t1; do
mv "$f" "${i%.t1}.t2"
done
(i.e .: for
peut lister des fichiers sans l'aide d'une commande externe telle que ls
ou find
)
HTH
Je referais ce chemin en bash:
for i in $(ls *.t1);
do
mv "$i" "${i%.t1}.t2"
done
EDIT: mon erreur: ce n'est pas récursif, voici ma façon de changer récursivement le nom de fichier:
for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done