ubuntuusers.de

dateien umbenennen

Status: Ungelöst | Ubuntu-Version: Kubuntu 23.10 (Mantic Minotaur)
Antworten |

tony88

Anmeldungsdatum:
28. März 2009

Beiträge: 101

Wohnort: 127.0.0.1

In einer Textdatei steht:

neuerDateiname alterDateiname

Die Namen bestehen nur aus Buchstaben und ein paar Zahlen, getrennt von einem Leerzeichen. Die Dateinamen haben keine Sonderzeichen.

Da es schon ein paar sehr viele sind ... mit welchen befehlen kann das automatisiert umbenannt werden?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9719

Wohnort: Münster

tony88 schrieb:

[…] Die Dateinamen haben keine Sonderzeichen.

Sofern das stimmt …

[…] mit welchen befehlen kann das automatisiert umbenannt werden?

Umbenennen kann man mit dem Befehl mv. Den musst Du in eine Schleife stecken, welche Deine Textdatei zeilenweise einliest. Wie hier erklärt: Shell/Bash-Skripting-Guide für Anfänger

tony88

(Themenstarter)

Anmeldungsdatum:
28. März 2009

Beiträge: 101

Wohnort: 127.0.0.1

die einzelnen befehle funktionieren, aber das verketten dieser klappt einfach nicht...:

alles nach dem leerzeichen anzeigen

| sed 's/.* //'

-

zweites feld anzeigen

cut -d' ' -f2

-

erstes feld

| awk '{print $1}'

-

zweites feld | awk '{print $2}'

-

while read line; do

echo $line

done < datei.txt

und

while read line; do

mv $(awk '{print $1}') $(awk '{print $2}')

done < datei.txt

funktionieren noch nicht richtig miteinander....

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1250

Wenn du schon so eine Datei hast, dann mach doch ein Shellskript daraus (bzw. aus einer Kopie). Schreibe (z. B. mit sed) vor jede Zeile einen "mv"-Befehl. Dann kannst du das Skript noch einmal kontrollieren, und danach rufst du es auf. Solch ein Vorgehen ist meiner Meinung nach erheblich simpler und weniger riskant. "mv" hat auch eine "verbose"-Option -v, mit der jede Aktion nochmal am Terminal protokolliert wird.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9719

Wohnort: Münster

tony88 schrieb:

die einzelnen befehle funktionieren, aber das verketten dieser klappt einfach nicht […]

Du denkst zu kompliziert. Du benötigst doch nur:

while read alt neu rest
do    echo mv $alt $neu
done  <datei.txt

Wenn das Ergebnis Deinen Vorstellungen entspricht, entferne das Wort echo.

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1250

Cool! Ist es tatsächlich so, dass "read" eine eingelesene Zeile von selber wortweise in Variablen schreibt? In der manpage von read hab ich nichts dazu gefunden.

tony88

(Themenstarter)

Anmeldungsdatum:
28. März 2009

Beiträge: 101

Wohnort: 127.0.0.1

Da wurde wirklich zu kompliziert gedenkt

while read alt neu rest
do    mv $neu $alt
done  <datei.txt

bringt das Ergebnis, vielen Dank!

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

@kB: Dass das auch mit mehreren Variablen geht, wusste ich bisher auch noch nicht (ich hätte das wahrscheinlich wieder über meinen heißgeliebten Array gelöst. 😄)

Aber eine Frage hätte ich: wozu dient die eingelesene Variable rest? Im nachfolgenden Befehl taucht die ja nicht auf.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9719

Wohnort: Münster

wxpte schrieb:

[…] wozu dient die eingelesene Variable rest?

Eine reine Vorsichtsmaßnahme, die man auch weglassen könnte. Nach Aufgabenstellung wäre $rest immer leer. Wenn jedoch die Spielregeln verletzt werden und es doch Leerzeichen oder Tabulatoren in den Namen gibt, fängt die zusätzliche Variable das auf. Die pure Existenz der dritten Variable garantiert also, dass die beiden ersten Variablen garantiert kein Leerzeichen oder Tabulator enthalten, selbst wenn die Eingabezeile fehlerhaft sein sollte. Wegen dieser Garantie kann man auf die Quotierung von $alt und $neu verzichten, die man sonst vorsichtshalber anwenden würde.

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

Ja, das ist eine sinnvolle Möglichkeit, Fehler abzufangen. Danke für die Info. 👍

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13209

juribel schrieb:

Cool! Ist es tatsächlich so, dass "read" eine eingelesene Zeile von selber wortweise in Variablen schreibt? In der manpage von read hab ich nichts dazu gefunden.

1
2
3
4
5
$ type read
read is a shell builtin
$ echo $SHELL
/bin/bash
$ man $SHELL

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1250

Danke!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

rklm schrieb:

juribel schrieb:

Cool! Ist es tatsächlich so, dass "read" eine eingelesene Zeile von selber wortweise in Variablen schreibt? In der manpage von read hab ich nichts dazu gefunden.

1
2
3
4
5
$ type read
read is a shell builtin
$ echo $SHELL
/bin/bash
$ man $SHELL

Da es ein Shell-builtin ist, kann man help read aufrufen, und muss nicht in der Bash zu read umständlich herumblättern/suchen, gerade read kommt sicher xmal als Prosawort vor.

1
help read

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

user_unknown schrieb:

Da es ein Shell-builtin ist, kann man help read aufrufen, und muss nicht in der Bash zu read umständlich herumblättern/suchen, gerade read kommt sicher xmal als Prosawort vor.

1
help read

Das ist ja auch ein guter Hinweis. Da ich das bisher auch nicht wusste, ...

... und muss nicht in der Bash zu read umständlich herumblättern/suchen, gerade read kommt sicher xmal als Prosawort vor.

weiß ich inzwischen aber immerhin, dass, wenn man es im manual zu bash finden will, 3039 Zeilen nach unten springen muss. 🤣

1
2
3
4
5
________
10:39 ~/Werkstatt$ man bash | grep -Fn 'read ['
3040:       read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
________
10:39 ~/Werkstatt$

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9719

Wohnort: Münster

wxpte schrieb:

[…] auch ein guter Hinweis. Da ich das bisher auch nicht wusste, ...

… solltest Du fleißiger im guten UbuntuUsers-de-Wiki lesen, beispielsweise: Bash/Hilfe

Antworten |