Wie benenne ich mehrere Dateinamen einschließlich Unterordnern um?

Wie benenne ich mehrere Dateinamen einschließlich Unterordnern um?

Ich habe beispielsweise folgende 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]

Antwort1

Versuchen:

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

    Dadurch wird eine Dateisuche im aktuellen Verzeichnis gestartet.

  • -type f

    Dadurch wird die Suche auf normale Dateien beschränkt.

  • -name '*.png'

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

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

    Dadurch wird der Befehl in einfachen Anführungszeichen mit „ $0zugewiesen an“ Moveund $1„zugewiesen an“ ausgeführt, dem Namen der gefundenen Datei. In unserem Fall lautet der Befehl in einfachen Anführungszeichen:

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

    Dadurch wird die Datei umbenannt und endet mit @2x.png. Die Konstruktion ${1%.png}entfernt das .pngvom Ende des Dateinamens. Somit ${1%.png}@2x.pngersetzt das .pngam Ende des Dateinamens durch @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

Lassen Sie 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 jetzt 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]

verwandte Informationen