Es ist mir nicht ganz klar, aber was ist der Unterschied zwischen mv
und rename
(von util-linux-ng 2.17.2
as /usr/bin/rename
)? Gibt es Vorteile gegenüber dem anderen rename
, als reguläre Ausdrücke zu akzeptieren, und mv
nicht? Ich glaube, dass rename
auch mehrere Umbenennungen von Dateien gleichzeitig möglich sind, während mv
dies nicht der Fall ist.
Ich konnte auf ihren man
Seiten keinen klaren Hinweis darauf finden, was sie sonst noch auszeichnet, oder durch eine Untersuchung allein.
type -a rename
undrename --version
?rename is /usr/bin/rename
undrename (util-linux-ng 2.17.2)
jeweils.rename
in verschiedenen Distributionen verschiedene Dinge bedeuten kann.Antworten:
Es ist im Grunde das, was auf dem Deckel steht, für beide.
mv
ist ein Standarddienstprogramm zum Verschieben einer oder mehrerer Dateien auf ein bestimmtes Ziel. Es kann zum Umbenennen einer Datei verwendet werden, wenn nur eine Datei verschoben werden muss. Wenn mehrere vorhanden sind,mv
funktioniert dies nur, wenn das Ziel ein Verzeichnis ist, und verschiebt die Dateien dorthin.mv foo bar
Verschiebt die Datei also entwederfoo
in das Verzeichnisbar
(falls vorhanden) oder umbenanntfoo
inbar
(fallsbar
nicht vorhanden oder kein Verzeichnis).mv foo1 foo2 bar
Verschiebt einfach beide Dateien in das Verzeichnisbar
oder beschwert sich, wennbar
es sich nicht um ein Verzeichnis handelt.mv
Ruft dierename()
C-Bibliotheksfunktion auf, um die Dateien zu verschieben. Wenn dies nicht funktioniert (sie werden in ein anderes Dateisystem verschoben), werden die Dateien kopiert und die Originale entfernt.Wenn Sie nur
mv
mehrere Dateien umbenennen möchten, müssen Sie eine Shell-Schleife verwenden. Es gibt eine Reihe von Fragen auf , die hier auf der Website, siehe zB diese , diese , und andere .Andererseits benennen die verschiedenen
rename
Dienstprogramme Dateien einzeln um.Das
rename
von util-linux, das Sie erwähnen, führt eine einfache Zeichenfolgenersetzung durch, z. B.rename foo bar *
würde sichfoobar
zubarbar
undasdffoo
zu ändernasdfbar
. Es ist nicht , jedoch einen regulären Ausdruck!Das Perl-Umbenennungsdienstprogramm ( oder verschiedene Instanzen davon ) verwendet einen Perl-Ausdruck, um die Dateinamen zu transformieren. Man wird höchstwahrscheinlich einen verwenden Befehl ein , wobei das Muster ist ein regulärer Ausdruck.
s/pattern/replacement/
Sowohl die Umbenennung von util-linux als auch die Umbenennung von Perl können verwendet werden, um Dateien gleichzeitig in ein anderes Verzeichnis zu verschieben, indem entsprechende Änderungen am Dateinamen vorgenommen werden. Dies ist jedoch etwas umständlich. Es werden auch nicht mehr als
rename()
die Dateien aufgerufen , sodass das Wechseln von einem Dateisystem zu einem anderen nicht funktioniert.Was
rename
Sie haben, kann von Ihrer Distribution und / oder dem, was Sie installiert haben, abhängen . Die meisten von ihnen unterstützenrename --version
dies. Verwenden Sie diese Option , um festzustellen, welche Sie haben.quelle
rename '$_=lc' *
. B. Dateinamen in Kleinbuchstaben schreiben. Aber ich denke, der häufigste Fall ist die Verwendungs///
(was ich erwähnt habe) und der Musterteil davon ist ein Regex; Ich glaube nicht, dass Sie dort eine Funktion verwenden können. Sie können dies jedoch im Ersatzteil tun.rename.ul
für die Util-Linux-Version ist und sein wird und nicht für eine der anderen.man rename
daher wäre es gut zu wissen, wie Sie das Debian-Beispiel verstehenrename foo foo0 foo?; rename foo foo0 foo??
Beispiel, da dies der einzige Unterschied zwischen diesen beiden Manpages war, die ich gesehen habe. Dieses Befehlspaar funktioniert, weil der erste den Namen jedes einstelligen Dateinamens eine Null hinzufügt und der zweite danach jedem zweistelligen Dateinamen eine (weitere) Null hinzufügt. Dieser zweite Satz enthält die Dateien, die mit dem ersten Befehl umbenannt wurden. Wennrename foo foo00 foo?
der erste Befehl ebenfalls funktioniert, werden nur zwei Nullen auf einmal hinzugefügt.mv
Ändert einfach den Namen der Datei (sie kann auch in ein anderes Dateisystem oder einen anderen Pfad verschoben werden). Sie geben ihm einen alten und einen neuen Namen und es ändert die Datei in den neuen Namen oder Speicherort.rename
wird verwendet, um Änderungen an der Bulk-Benennung vorzunehmen. Angenommen, Sie hatten tausend Dateienfoo000.log
durchfoo999.log
und wollten sie inbar000.log
durch ändernbar999.log
. Mitmv
Ihnen zu tun haben würdemv foo000.log bar000.log
,mv foo001 bar001.log
usw. oder auch ein Skript schreiben. Mitrename
man einfach tunrename foo bar foo*.log
, und voila, sind tausend Dateien in einem Augenblick verändert! Ziemlich cool. Überprüfen Sie dieman rename
Seite erneut für Details.quelle
mv
Es ist eine grundlegende Befehlszeile, die entwickelt wurde, um eine Sache zu erledigen und sie gut zu machen (Unix-Philosophie): Datei (en) oder Verzeichnis (e) verschieben .
Sie können
STDOUT
&STDIN
¹ hacken , um die Zielzeichenfolge im laufenden Betrieb zu ändern, aber es ist einfach kein intelligenter Hackumbenennen (Perls)
Es gibt andere Tools mit demselben Namen, die dies möglicherweise können oder nicht. Seien Sie also vorsichtig.
Wenn Leute darüber reden
rename
, denken wir an diesen, nicht an denELF
, der weniger mächtig ist (Magie?).Es ist nicht einfach, es ist Perl. Sie können einige Perl-Funktionen im Inneren übergeben, und es ist extrem leistungsfähig.
Betrachten Sie dieses Beispiel:
Sie möchten eine Reihe von Dateien wie umbenennen
Sie können den Ziffern
sprintf()
wie folgt Nullen voranstellen (mit Regex, heh, es ist Perl: D):Jetzt hast du :
Nicht wirklich ein grundlegender Befehl, nicht wahr?
Das Umbenennen ist nicht wirklich zum Verschieben von Verzeichnissen gedacht, kann es aber:
Die verschobene Datei
¹ Code, den wir auf
*.stackexchange.*
Websites sehenEs ist nicht der richtige Weg , es ist einfach fehlerhaft, nur um zu erklären, warum das richtige Werkzeug im richtigen Moment verwendet wird
quelle
sprintf
Umbenennungmv verschiebt oder benennt Dateien und Verzeichnisse um und sichert sie; Umbenennen benennt nur Dateien um.
mv bietet mehr Funktionen und Optionen. Sehen Sie sich die Schalter in den Manpages an, um die Unterschiede in den Funktionen zu erkennen. Werfen wir einen Blick auf man in Ubuntu 18.04LTS (Ihr Kilometerstand kann je nach Version jedes Pakets variieren):
MV-Optionen (ohne Hilfe und Version)
Optionen umbenennen (Hilfe und Version weglassen)
quelle