Ich möchte mithilfe von Bash-Skripten mehrere Dateien im selben Verzeichnis umbenennen. Die Namen der Dateien lauten wie folgt:
file2602201409853.p
file0901201437404.p
file0901201438761.p
file1003201410069.p
file2602201410180.p
Ich möchte in folgendes Format umbenennen:
file2503201409853.p
file2503201437404.p
file2503201438761.p
file2503201410069.p
file2503201410180.p
Ich habe über den Befehl zum Umbenennen gelesen und versucht, es auf diese Weise zu tun, aber es macht nichts. Ich glaube, ich habe Fragen zur Syntax. Dann habe ich gelesen, dass Sie mit dem Befehl mv wie folgt eine Schleife erstellen können :
for file in cmpsms*2014*.p; do
mv "$file" "${file/cmpsms*2014*.p/cmpsms25032014*.p}"
done
Ich kann die Dateien aber nicht umbenennen. Was mache ich falsch?
*
ist?Antworten:
Sie haben zu Recht überlegt, zuerst umzubenennen. Die Syntax ist etwas seltsam, wenn Sie nicht an reguläre Ausdrücke gewöhnt sind, aber wenn Sie wissen, was Sie tun, ist dies bei weitem der schnellste / kürzeste Weg:
Das stimmt einfach mit den ersten 4 Zahlen überein und tauscht sie gegen die von Ihnen angegebenen aus.
Und ein Testgeschirr (
-vn
bedeutet, dass Sie ausführlich sind, aber nichts tun ), das Ihre Dateinamen verwendet:quelle
rename
es ein völlig anderes Tool zum Umbenennen von Dateien (das als Debian ausgeliefert wirdrename.ul
).rename
wie Debian.Dies sollte den Trick machen:
Es ersetzt die Zeichenfolge zwischen dem 4. und dem 12. Zeichen durch "25032014".
quelle
for f in file*; do mv $f ${f/${f:4:4}/2503}; done
funktioniert auch.for f in *Huge*; do mv $f ${f/Huge/Monstrous}; done
Das ist wirklich die Antwort von @ Eric von oben - aber es ist eine elegante Antwort, also poste ich sie als richtige Antwort, um mehr Aufmerksamkeit darauf zu lenken.
quelle
Dies sollte den Trick machen. Hinweis - Ich habe nicht die Angewohnheit, Massenbefehle zu übergeben - wie geschrieben ist es nur ein Echo. Sie müssen das klären, bevor es funktioniert.
quelle
Ein einfacher nativer Weg, dies ohne Schleifen zu tun, mit Directory Traversal :
Jede vorhandene Datei wird umbenannt.
Und unten ein Arbeitsbeispiel mit Parallelisierung :
quelle
find -type f -name "file*.p" | parallel 'ext="{}" ; mv -- {} ${ext:0:4}2503${ext:8}'
Wenn Sie feststellen, dass Sie so etwas häufig tun, suchen Sie nach "rename.pl". Es ist ein Perl-Skript, aber Sie können es einfach mit Perl-Code füllen (wie z. B. /// Ausdruck), und es führt eine Massenumbenennung basierend auf diesem Ausdruck oder Code durch.
Hier gibt es eine Basisversion: http://stackoverflow.org/wiki/Rename.pl, aber es gibt auch andere Versionen, die im Internet herumfliegen. Es gibt es schon seit Ewigkeiten und Ewigkeiten.
quelle