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 {} +
renamen'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}".t2piè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 $1et tronquez la .t1chaîne littérale à sa fin ( %opérateur de signe de pourcentage ). 2 / Ajoutez la .t2chaîne littérale au résultat.
find . -type f -name '*.t1'pour éviter les dossiers
Ou vous pouvez simplement installer la mmvcommande et faire:
mmv '*.t1' '#1.t2'
Voici #1la 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: forpeut lister des fichiers sans l'aide d'une commande externe telle que lsou find)
HTH
*in*.t1
$ mmv -n ';*.t1' '#1#2.t2'. supprimer le -ndrapeau 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
findsyntaxe est mauvaise. Assurez-vous également de citer vos variables