2010-10-26 19 views
1

renommer quelques fichiers (1234.xml, 9876.xml, 2345.xml etc) avec .xml extension avec le code suivant:Batch renommer des fichiers dans unix et rollback

for i in *.xml 
do 
mv $i $i.ab 
done 

il devient 1234.xml.ab, 9876.xml.ab, 2345.xml.ab ... etc

Maintenant, je veux le renommer 1234.xml.SD, 9876.xml.SD, 2345.xml.SD ... etc.

Ce sont 100 fichiers.

Comment cela peut-il être réalisé avec l'aide du code? S'il vous plaît donnez votre avis.

+0

vérifier ici: http: // theunixshell .blogspot.com/2013/01/bulk-renaming-of-files-in-unix.html – Vijay

Répondre

1

Si vous utilisez bash vous pouvez faire:

for f in *.xml.ab; do 
    mv "$f" "${f%.ab}.SD" 
done 

ou tout simplement utiliser la commande rename comme:

rename 's/ab$/SD/' *.xml.ab 
+0

Merci, ça marche pour moi :-) – ErAB

+0

D'une certaine manière, cela fonctionne sans "" dans la commande MOVE. – ErAB

+2

Mais si vos noms de fichiers avaient des espaces, ils échoueraient sans le '' '. Donc, entourez toujours les noms de fichiers dans' "'. – codaddict

0

Vous pouvez le faire comme ça:

for f in *.xml.ab; do 
    mv $f `echo $f | sed 's/\.ab$//g'` 
done 
+0

ah, cool, beaucoup plus facile :-) merci! – ErAB

+0

Vous avez besoin de guillemets autour des substitutions de variables et de commandes, et 'echo' n'est fiable que si le nom de fichier ne commence pas par' -' et ne contient pas d'antislash. 'mv ---" $ f "" $ (printf% s "$ f" | sed 's/\. ab $ // g') "' serait correct, mais [la réponse de codaddict] (http: // stackoverflow .com/questions/4025438/batch-renommer-fichiers-en-unix-and-rollback/4025499 # 4025499) est conceptuellement plus simple et plus facile à obtenir. – Gilles

0

I ne suis pas clair si vous voulez renommer foo.xml.ab -> foo.xml ou foo.xml.ab -> foo.xml.SD

foo.xml.ab -> foo.xml

for f in *.xml.ab; do 
    mv "$f" "${f%.ab}" 
done 

foo.xml.ab -> foo.xml.SD

for f in *.xml.ab; do 
    mv "$f" "${f/.ab/.SD}" 
done 
+0

il le deuxième code que vous avez écrit [foo.xml.ab -> foo.xml.SD] im essayer :-) Merci – ErAB