web-dev-qa-db-fra.com

Renommer les fichiers progressivement dans un répertoire spécifique?

J'ai un répertoire contenant un groupe de fichiers .txt, j'ai besoin d'une commande pour renommer ces fichiers en une seule commande, ainsi leur nom sera: file1.txt , file2.txt, file3.txt , etc .

De l'aide ?

7
nux

Vous pouvez l’utiliser dans le terminal pour renommer les fichiers comme vous le souhaitez,

j=1;for i in *.txt; do mv "$i" file"$j".txt; let j=j+1;done

Cela fera le travail.

Explication:

  • Définir un compteur j, le définir initialement sur 1
  • Initiez une boucle for et utilisez un glob glob de shell *.txt pour obtenir tous les fichiers txt.
  • pour chaque fichier, renommez-le avec mv et augmentez le compteur de 1.
19
souravc

Vous pouvez utiliser la commande rename, qui est généralement incluse dans une installation par défaut:

c=0 rename 's/.*/sprintf("file%05d.txt", ++$ENV{c})/e' *

Utilisez le drapeau -n si vous voulez d'abord faire un test:

c=0 rename -n 's/.*/sprintf("file%05d.txt", ++$ENV{c})/e' *

La façon dont cela fonctionne est, pour chaque argument, il exécute l'expression Perl s/// et effectue le changement de nom de l'original à la chaîne remplacée. Dans la chaîne de remplacement, j'utilise sprintf pour formater le nom, où j'utilise la variable d'environnement c comme compteur à partir de 1.

Dans la plupart des cas, vous aurez peut-être également besoin de "0" en majuscule pour chaque numéro. %05d fait l'affaire, 5 étant le nombre de chiffres.

7
janos

La commande suivante renommera également les fichiers de manière incrémentielle:

cd (directory containing files )

Puis lancez ce script:

count=1
for i in *; do
    mv "${i}" file${count}.`echo "${i}" | awk -F. '{print $2}'`
    ((++count))

done 
2
nux