Wie benenne ich mehrere Dateinamen inklusive Unterordner um?

1

Zum Beispiel habe ich die folgenden Dateien:

./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png

Gibt es einen einzeiligen Befehl oder ein Skript, um den Dateinamen wie folgt umzubenennen?

./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB/[email protected]
./dirB/[email protected]
./dirB/dirC/[email protected]
Srjohnhuang
quelle

Antworten:

0

Versuchen:

find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
  • find .

    Dies startet eine Dateisuche mit dem aktuellen Verzeichnis.

  • -type f

    Dies beschränkt die Suche auf reguläre Dateien.

  • -name '*.png'

    Dies beschränkt die Suche auf Dateien, deren Namen mit enden .png.

  • -execdir bash -c '...' Move {} \;

    Dadurch wird der Befehl in einfachen Anführungszeichen ausgeführt, wobei der Name der gefundenen Datei $0zugewiesen Moveund $1zugewiesen wird. In unserem Fall lautet der Befehl in einfachen Anführungszeichen:

  • mv "$1" "${1%.png}@2x.png"

    Dies benennt die Datei um, mit der geendet werden soll @2x.png. Das Konstrukt ${1%.png}entfernt das .pngvom Ende des Dateinamens. Somit ${1%.png}@2x.pngersetzt das .pngam Ende des Dateinamens mit @2x.png.

Beispiel

Beginnen wir mit Verzeichnissen mit diesen Dateien:

$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png

Lass uns nun unseren Befehl ausführen:

$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;

Nachdem der Befehl ausgeführt wurde, haben wir nun diese Dateien:

$ find .
.
./dirA
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB
./dirB/dirC
./dirB/dirC/[email protected]
./dirB/[email protected]
./dirB/[email protected]
John1024
quelle