Disons que j'ai ces fichiers dans mon dossier:
cat.txt
dog.txt
house.txt
tree.txt
Je veux tous les renommer en quelque chose comme ceci:
file1.txt
file2.txt
file3.txt
file4.txt
Est-ce possible de le faire via la ligne de commande?
J'ai seulement vu des questions sur le changement de nom de fichiers comportant une sorte de motif, comme renommer dog1.txt
, dog2.txt
-> cat1.txt
, cat2.txt
.
Utilisez l'utilitaire rename
pour le faire:
rename -n '$_ = sprintf "file%d.txt", ++$::count' *
-n
fait en sorte que la commande vous montre ce qui se passera si vous l'exécutez. Si le résultat correspond à vos souhaits, exécutez-le sans -n
pour renommer les fichiers.*
par ce que vous voulez renommer, par exemple: dog*.txt
pour renommer uniquement dog1.txt
, dog2.txt
... en file1.txt
, file2.txt
, etc.$_
est une entrée par défaut (noms de fichiers) que nous devrions modifier.=
nous le modifionssprintf
nous définissons un schéma démarré par file
suivi de %d
signifie un nombre et se termine par le .txt
.++$::count
, qui est un simple compteur itéré après chaque changement de nom.L'idée vient de ici .
C'est peut-être fait, mais avec quelques réserves. Vous avez déclaré que "... ces fichiers [sont] dans mon dossier", ce qui serait l'une de ces mises en garde. Nous pourrions utiliser globstar
et itérer sur les noms de fichiers développés:
$ c=0;for f in *; do ((c++)); echo "$f" "--->" file"$c".txt ; done
cat.txt ---> file1.txt
dog.txt ---> file2.txt
house.txt ---> file3.txt
tree.txt ---> file4.txt
Bien sûr, vous pouvez toujours utiliser le mode "manuel" via un list.txt
, où vous pouvez stocker une liste de noms de fichiers et lire ce fichier via le while IFS= read -r ; do ... done < list.txt
.
$ c=0; while IFS= read -r f; do ((c++)); echo "$f" file"$c" ; done < input.txt
cat.txt file1
dog.txt file2
tree.txt file3
Bien entendu, ce thème de liste peut être étendu de nombreuses manières - listes csv, fichiers json, listes de valeurs-clés - vous le nommez. Il y a beaucoup de questions sur ces en ligne. Il y a bien sûr d'autres choix à faire, comme donner un chemin complet aux fichiers ou tout faire dans le même répertoire que la liste.
Enfin, j'ai déjà fait allusion aux listes de valeurs-clés. Avec bash
et d'autres langages de script plus modernes tels que Python ou Perl, vous pouvez avoir un hachage (ou un dictionnaire) avec une liste de fichiers et le nouveau nom correspondant que vous souhaitez attribuer au fichier.