Umbenennen von Dateien aus einer Liste von Dateinamen

Umbenennen von Dateien aus einer Liste von Dateinamen

Ich bin noch sehr neu im Shell-Scripting, daher bin ich mir sicher, dass dieser Befehl in vielerlei Hinsicht falsch ist. Ich versuche, einen Ordner mit Dateien in die Namen einer txt-Datei umzubenennen. Voraussetzung ist, dass die Dateinamen.txt und die Dateien im Ordner bereits so organisiert sind, dass die erste Zeile mit der ersten Datei im System übereinstimmt. Was ich bekam, war:

while read line; do echo -e "$line\n" | for f in *mkv do mv f $1; done < filenames.txt

aber es hat nicht funktioniert. Könnt ihr mir helfen, das Problem zu beheben?

Danke

Antwort1

Wenn Sie keine algorithmische Regel zum Umbenennen der Dateien haben (d. h. Sie benötigen tatsächlich eine Datei als Eingabe), würde ich vorschlagen,

  1. Erstellen Sie eine TXT-Datei aus der Liste der Dateien, die Sie umbenennen möchten, zB:

    finde . -name "*.mkv" > dateien.txt

  2. editieren Sie diese Datei und fügen Sie in jeder Zeile den neuen Namen nach dem alten ein, zB

    ./meinererster.mkv ./meinneuererster.mkv

  3. Verarbeite diese Datei:

    während Zeile lesen; eval mv $line durchführen; fertig < files.txt

Antwort2

Ich lasse mich hiervon inspirieren:https://unix.stackexchange.com/a/26604

Es klingt, als müssten Sie sowohl die Datei als auch die Dateien im Verzeichnis gleichzeitig durchlaufen:

DIR=./thefiledir
while : ; do
    read -r oldfile <&3
    read -r newfile <&4
    if [ -z "$oldfile" -o -z "$newfile" ]; then
        break
    fi
    mv $oldfile $newfile
done 3< <( find $DIR -maxdepth 1 -type f | sort ) 4< filenames.txt

Ich weiß nicht, ob Sie den Verzeichnisnamen in der Datei haben , daher möchten Sie möglicherweise vor der Zeile filenames.txteins einfügen, um zu testen, ob dies das gewünschte Ergebnis bringt.echomv

Ich könnte es auch anders versuchen ... Ich bin nicht sicher, wie Sie die Datei mit den neuen Namen generieren, aber wie in einer anderen Antwort vorgeschlagen wird, könnten Sie eine Schleife über eine Datei mit alten und neuen Namen ausführen oder einfach die Namen lesen und eine Logik anwenden, um die neuen Namen zu erstellen.

verwandte Informationen