GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie benenne ich mehrere Dateien mit Find um?

Ich möchte mehrere Dateien (Datei1 … DateiN in Datei1_umbenannt … DateiN_umbenannt) mit find umbenennen Befehl:

find . -type f -name 'file*' -exec mv filename='{}' $(basename $filename)_renamed ';'

Aber ich bekomme diesen Fehler:

mv: cannot stat ‘filename=./file1’: No such file or directory

Dies funktioniert nicht, da Dateiname nicht als Shell-Variable interpretiert wird.

Akzeptierte Antwort:

Das Folgende ist eine direkte Lösung für Ihren Ansatz:

find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}_renamed"' \;

Dies ist jedoch sehr teuer, wenn Sie viele übereinstimmende Dateien haben, da Sie eine neue Shell starten (die eine mv ) für jedes Spiel. Und wenn Sie lustige Zeichen in einem Dateinamen haben, wird dieser explodieren. Ein effizienterer und sichererer Ansatz ist dieser:

find . -type f -name 'file*' -print0 | xargs --null -I{} mv {} {}_renamed

Es hat auch den Vorteil, mit seltsam benannten Dateien zu arbeiten. Wenn find unterstützt, kann dies auf

reduziert werden
find . -type f -name 'file*' -exec mv {} {}_renamed \;

Die xargs Version ist nützlich, wenn {} nicht verwendet wird , wie in

find .... -print0 | xargs --null rm

Hier rm wird einmal (oder bei vielen Dateien mehrmals) aufgerufen, aber nicht für jede Datei.

Ich habe den basename entfernt in Ihrer Frage, weil es wahrscheinlich falsch ist:Sie würden foo/bar/file8 verschieben zu file8_renamed , nicht foo/bar/file8_renamed .

Änderungen (wie in den Kommentaren vorgeschlagen):

  • Kurzer find hinzugefügt ohne xargs
  • Sicherheitsaufkleber hinzugefügt

Linux
  1. So komprimieren Sie mehrere Dateien unter Linux

  2. Wie benenne ich mehrere Dateien in einem einzigen Befehl oder Skript in Unix um?

  3. So benennen Sie mehrere Dateien gleichzeitig in Linux um

  4. So benennen Sie mehrere Dateien zusammen in Linux mit 3 Methoden um

  5. Linux:Dateierweiterungen für mehrere Dateien entfernen

So finden Sie Dateien unter Linux

So finden Sie Dateien über die Befehlszeile im Linux-Terminal

So benennen Sie Dateien über die Befehlszeile in Linux um

So benennen Sie eine Datei (en) in Linux um

So bearbeiten Sie mehrere Dateien mit dem Vim-Editor

So finden Sie Dateien in Debian