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.