Je veux itérer récursive dans un répertoire et modifiez l'extension de tous les fichiers d'une certaine extension, dire .t1
à .t2
. Quelle est la commande bash pour faire cela?
Je veux itérer récursive dans un répertoire et modifiez l'extension de tous les fichiers d'une certaine extension, dire .t1
à .t2
. Quelle est la commande bash pour faire cela?
Réponses:
Si vous avez renommé disponible, utilisez:
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' +
ou sinon:
find . -name '*.t1' -exec rename .t1 .t2 {} +
Si le changement de nom n'est pas disponible, utilisez:
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' +
find . -name '*.t1' -exec rename .t1 .t2 {} +
rename
n'autorise pas l'expression de substitution de style sed. Je dois adorer Linux. J'avais l'habitude d'installer TotalCommander pour Windows pour faire des choses comme ça.)
"${1%.t1}".t2
pièce, comme je l'ai fait: Il utilise la manipulation de chaîne bash pour faire ce qui suit: 1 / Prenez le premier paramètre de position $1
et tronquez la .t1
chaîne littérale à sa fin ( %
opérateur de signe de pourcentage ). 2 / Ajoutez la .t2
chaîne littérale au résultat.
find . -type f -name '*.t1'
pour éviter les dossiers
Ou vous pouvez simplement installer la mmv
commande et faire:
mmv '*.t1' '#1.t2'
Voici #1
la première partie du glob c'est à dire le *
in *.t1
.
Ou dans des trucs de pure bash, un moyen simple serait:
for f in *.t1; do
mv "$f" "${i%.t1}.t2"
done
(ie: for
peut lister des fichiers sans l'aide d'une commande externe telle que ls
ou find
)
HTH
*
in*.t1
$ mmv -n ';*.t1' '#1#2.t2'
. supprimer le -n
drapeau pour exécuter
Je ferais de cette façon 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 de nom de fichier récursif:
for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done
find
syntaxe est mauvaise. Assurez-vous également de citer vos variables