2017-07-24 1 views
1

Je veux renommer tous les fichiers dans un répertoire Les noms de fichier sont 1.ABC, 2.ABC, 3.ABC et ainsi de suite Je veux les renommer en 1.abc, 2.abc, 3.abc .... et ainsi de suite respectivement.Renommer les noms de fichiers sous Linux avec la liste

J'ai essayé

ls -1 *.ABC| xargs -I{} mv {} ${{}/ABC/abc} 

mais cela ne semble pas fonctionner donne erreur

bash: ${{}/ABC/abc}: bad substitution. 

J'ai essayé de renommer commande aussi, mais cela ne semble pas être en cours d'exécution sur mon système:

rename 's/\.ABC$/.abc/' *.ABC 

ne donne aucun résultat. Je veux coller avec la première méthode que j'ai essayé si cela peut être corrigé.

+0

Voir aussi [Pourquoi vous ne devriez pas analyser la sortie de ls (1)] (http://mywiki.wooledge.org/ParsingLs) et la question Unix & Linux SE [Pourquoi * pas * parse 'ls'?] (https://unix.stackexchange.com/q/ 128985/1986) –

Répondre

1

Si vous avez l'utilitaire rename alors vous pouvez juste faire:

rename 's/ABC/abc/' *.ABC 

Ou bien vous pouvez utiliser cette simple boucle for:

for file in *.ABC; do 
    mv "$file" "${file/.*/.abc}" 
done 
+1

Il l'a fait, merci anubhava, j'étais en fait conscient de cette méthode. Je cherchais en fait une correction dans ma première approche 'ls -1 * .ABC | xargs -I {} mv {} $ {{}/ABC/abc} 'mais je pense qu'il ne peut être utilisé que lorsque vous voulez ajouter des noms de fichiers lors du changement de nom et non quand vous voulez remplacer ou retirer une partie de la chaîne nouveaux noms de fichiers comme dans 'ls -1 * .ABC | xargs -I {} mv {} {} _bkp' – Vicky

+0

En général, vous devriez éviter d'analyser la sortie de 'ls' – anubhava