Ce n'est pas complètement clair pour moi, mais quelle est la différence entre mv
et rename
(à partir util-linux-ng 2.17.2
de /usr/bin/rename
)? Y a-t-il des avantages l'un par rapport à l'autre au-delà de l' rename
acceptation d'expressions régulières et mv
non? Je crois que rename
peut également gérer plusieurs renommages de fichiers à la fois, alors mv
qu'il ne le fait pas.
Je n'ai pas pu trouver d'indication claire dans leurs man
pages sur ce qui les distingue ou par une enquête par moi-même.
type -a rename
etrename --version
?rename is /usr/bin/rename
etrename (util-linux-ng 2.17.2)
respectivement.rename
peut signifier différentes choses dans différentes distributions.Réponses:
C'est essentiellement ce qu'il y a sur le couvercle, pour les deux.
mv
est un utilitaire standard pour déplacer un ou plusieurs fichiers vers une cible donnée. Il peut être utilisé pour renommer un fichier, s'il n'y a qu'un seul fichier à déplacer. S'il y en a plusieurs,mv
ne fonctionne que si la cible est un répertoire et y déplace les fichiers.Donc ,
mv foo bar
va soit déplacer le fichierfoo
dans le répertoirebar
(si elle existe), ou renommerfoo
àbar
(sibar
n'existe pas ou est pas un répertoire).mv foo1 foo2 bar
déplacera simplement les deux fichiers dans le répertoirebar
ou se plaindra s'ilbar
ne s'agit pas d'un répertoire.mv
appellera larename()
fonction de bibliothèque C pour déplacer les fichiers, et si cela ne fonctionne pas (ils sont déplacés vers un autre système de fichiers), il copiera les fichiers et supprimera les originaux.Si tout ce que vous avez est
mv
et que vous souhaitez renommer plusieurs fichiers, vous devrez utiliser une boucle shell. Il y a un certain nombre de questions sur ce ici sur le site, voir par exemple ce , ce , et d' autres .D'un autre côté, les différents
rename
utilitaires renomment les fichiers individuellement.Le
rename
from util-linux que vous mentionnez fait une simple substitution de chaîne, par exemplerename foo bar *
changeraitfoobar
enbarbar
, etasdffoo
enasdfbar
. Il ne pas cependant, prendre une expression régulière!L'utilitaire de renommage Perl ( ou diverses instances de celui-ci ) utilise une expression Perl pour transformer les noms de fichiers. On utilisera très probablement une commande, où le motif est une expression régulière.
s/pattern/replacement/
Le renommage util-linux et le renommage Perl peuvent être utilisés pour déplacer des fichiers vers un autre répertoire en même temps, en apportant les modifications appropriées au nom du fichier, mais c'est un peu gênant. Il ne fait pas plus qu'appeler
rename()
les fichiers, donc passer d'un système de fichiers à un autre ne fonctionne pas.Quant à ce que
rename
vous avez, cela peut dépendre de votre distribution et / ou de ce que vous avez installé. La plupart d'entre eux prennent en chargerename --version
, alors utilisez-le pour identifier celui que vous avez.la source
rename '$_=lc' *
pour les noms de fichiers en minuscules. Mais je pense que le cas le plus courant est d'utilisers///
(que j'ai mentionné) et la partie modèle est une expression régulière; Je ne pense pas que vous puissiez utiliser une fonction là-bas. Vous pouvez cependant le faire dans la pièce de rechange.rename.ul
est et sera pour la version util-linux, et pas pour les autres.man rename
ce qu'il serait bon de connaître votre compréhension de l'exemple Debianrename foo foo0 foo?; rename foo foo0 foo??
exemple, car c'était la seule différence entre ces deux pages de manuel que j'ai vues. Cette paire de commandes fonctionne parce que la première ajoute un zéro aux noms de chaque nom de fichier à un chiffre, et après cela, la seconde ajoute (une autre) zéro à chaque nom de fichier à deux chiffres. Ce deuxième ensemble comprend les fichiers renommés par la première commande. L'utilisationrename foo foo00 foo?
de la première commande fonctionne également, elle ajoute simplement deux zéros à la fois.mv
change simplement le nom du fichier (il peut également le déplacer vers un autre système de fichiers ou chemin). Vous lui donnez un ancien nom et un nouveau nom, et il modifie le fichier au nouveau nom ou emplacement.rename
est utilisé pour effectuer des changements de nom en masse. Supposons que vous aviez mille fichiers,foo000.log
parfoo999.log
et que vous vouliez les changer àbar000.log
par le biaisbar999.log
. Avecmv
vous auriez à fairemv foo000.log bar000.log
,mv foo001 bar001.log
etc. ou d' écrire un autre script. Avecrename
vous faites simplementrename foo bar foo*.log
, et le tour est joué, mille fichiers sont modifiés en un instant! Plutôt cool. Consultez àman rename
nouveau la page pour plus de détails.la source
mv
C'est une ligne de commande de base conçue pour faire une chose et bien le faire (philosophie Unix): déplacer des fichiers ou des répertoires .
Vous pouvez pirater
STDOUT
&STDIN
¹ pour modifier à la volée la chaîne de destination, mais ce n'est tout simplement pas un hack intelligentrenommer (celui de Perl)
Il existe d'autres outils portant le même nom qui peuvent ou non être en mesure de le faire, alors soyez prudent.
Quand les gens parlent
rename
, nous pensons à celui-ci, pas àELF
celui, le moins puissant (magique?).Ce n'est pas basique, c'est Perl. Vous pouvez passer certaines fonctions de Perl à l'intérieur, et c'est extrêmement puissant.
Considérez cet exemple:
Vous voulez renommer un tas de fichiers comme
Vous pouvez ajouter des zéros aux chiffres
sprintf()
comme ceci (en utilisant regex, heh, c'est Perl: D):Maintenant vous avez :
Pas vraiment une commande de base, n'est-ce pas?
renommer n'est pas vraiment conçu pour déplacer des répertoires , mais il peut le faire:
Le fichier déplacé
¹ du code que nous voyons sur les
*.stackexchange.*
sites WebCe n'est pas la voie à suivre , c'est tout simplement un buggy, juste pour expliquer pourquoi utiliser le bon outil au bon moment
la source
sprintf
ing avec renamemv déplace ou renomme des fichiers et des répertoires et les sauvegarde; renommer renomme simplement les fichiers.
mv a plus de capacités et d'options. Regardez les commutateurs dans les pages de manuel de chacun pour voir les différences de capacités. Jetons un coup d'œil à l'aide de man dans Ubuntu 18.04LTS (votre kilométrage peut varier selon la version de chaque package):
options mv (en omettant l'aide et la version)
renommer les options (en omettant l'aide et la version)
la source