Lösung 1:
Früher habe ich dafür Perl-Skripte geschrieben, bis ich den Umbenennungsbefehl entdeckte.
Es akzeptiert eine Perl-Regex für die Umbenennung:
Dafür habe ich einfach zwei Befehle eingegeben:
rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log
Für einige Distributionen jedoch rename
hat diese Funktionalität nicht (siehe Manpage), und Sie müssen möglicherweise perl-rename
installieren oder prename
.
Lösung 2:
mmv ist ein Standard-Linux-Dienstprogramm zum Verschieben/Umbenennen mehrerer Dateien. Es ist in den Repos für die meisten Distributionen verfügbar. Für Ihr obiges Beispiel könnten Sie Folgendes tun:
mmv '*-Log-*-*-*-NODATA.txt' '#l1.#4#3#2.log'
Weitere Informationen finden Sie in diesem Debaday-Artikel oder auf der Manpage.
Lösung 3:
Da ich keinen Umbenennungsbefehl habe, verlasse ich mich auf diesen:
for myfile in /my/folder/*; do
target=$(echo $myfile|sed -e 's/foo/bar/g')
mv "$myfile" "$target"
done
Lösung 4:
rename
util ist nicht sehr "Standard". Jede Distribution wird mit einem anderen rename
ausgeliefert Werkzeug. Zum Beispiel hier auf Gentoo, rename
ist von sys-apps/util-linux
Paket und unterstützt keine Regex.
Hamish Downer vorgeschlagen mmv
, es scheint nützlich zu sein, besonders für die Verwendung in Skripten.
Andererseits möchten Sie für den allgemeinen Fall möglicherweise renameutils. Es hat qmv
und qcp
Befehle, die einen Texteditor Ihrer Wahl öffnen (meine Präferenz:Vim) und Ihnen erlauben, die Zieldateinamen dort zu bearbeiten. Nach dem Speichern und Schließen des Editors qmv
/qcp
übernimmt die gesamte Umbenennung.
Beide mmv
und qmv
sind intelligent genug, um Dateien in der richtigen Reihenfolge umzubenennen und auch zirkuläre Umbenennungen zu erkennen, und erstellen bei Bedarf automatisch eine temporäre Datei.