J'ai un répertoire /var/tmp/abc
qui contient 4 fichiers:
12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
Je veux renommer tous les fichiers CSV (trouver tous les fichiers et les renommer) de la manière la plus courte possible (probablement une ligne):
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
rename
. Je suppose que c'est Larry Wallrename
, durename
paquet dans Debian et dérivé (et IIRCprename
sur les systèmes de persuasion RedHat). Un outil très utile.perl-rename
dans arch linuxverbose
indicateur, il ne produit rien et n'effectue pas les changements de nom de fichier, même si le chemin actuel a fichiers avec des noms similaires à12345_foo.csv
. Dois-je effectuer une tâche supplémentaire pour le faire fonctionner (actuellement sur Fedora 30)? C'est une approche plus propre que le bouclage. Merci d'avance!rename
ouprename
? Voir mon commentaire ci-dessus.man {the command}
liste les auteurs à la fin.rename
commande complètement différente ; voir unix.stackexchange.com/a/238862/135943Essayer:
Comment ça fonctionne:
for f in *.csv; do
Cela démarre une boucle sur tous les
*.csv
fichiers.mv -i -- "$f" "XXXXX-${f#*-}"
Cela renomme les fichiers comme vous le souhaitez, en demandant de manière interactive avant d'écraser un fichier.
done
Cela marque la fin de la boucle.
Exemple:
la source
J'ai aimé le petit défi que vous avez publié, voici donc ma solution. Je suppose que tous vos fichiers commencent par 5 caractères numériques, donc utilisez la commande cut pour remplacer les fichiers numériques initiaux par "XXXXX".
Ci-dessous, les fichiers avant la commande.
Ci-dessous, la commande one liner.
Ci-dessous, les fichiers après la commande.
C'est ça que vous cherchez? :)
Les références:
Boucler la sortie de la commande dans bash
Sous-chaînes en bash
la source
no need to fork a new process for each
?cut
est un binaire (/usr/bin/cut
) distinct et son exécution consomme plus de ressources que l'utilisation de shell intégrés.pas de fourches:
Lorsque vous utilisez une boucle shell, les
mv
fourches une fois par fichier. Larename
commande de Perl ne fonctionne pas.(La commande renommer de Perl a certaines restrictions, mais dans ce cas spécifique, ces restrictions ne s'appliquent pas.)
En ce qui concerne la
rename
commande ci-dessus, oui, cela fonctionne, mais vous avez alors toute cette confusion entre deux types de renommage différents, etc. Si vous avez le bon, parfait, mais sinon, cela fonctionne aussi.Si vous n'avez pas la commande perl-rename et ne pouvez pas l'installer, vous pouvez simplement faire ceci:
Comme vous pouvez le voir, cela utilise la même substitution que celle indiquée dans la réponse du haut. Bien sûr, le perl-rename a d'autres cloches et sifflets (la première réponse mentionnée,
-n
déjà, puis il y a-0
,-f
et ainsi de suite), et plus vous en avez besoin, plus vous devez installer cela au lieu de lancer le vôtre de cette manière .la source
rename
commande ( première réponse , utilise également Perl), alors vous devriez peut-être ajouter un peu plus d'explications que simplement "pas de fourches" à la réponse.