Wie benennt man mehrere Unterordner mit Dateinamen um?

306
srjohnhuang

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/fileA@2x.png ./dirA/fileB@2x.png ./dirA/fileC@2x.png ./dirB/fileD@2x.png ./dirB/fileE@2x.png ./dirB/dirC/fileF@2x.png 
1

1 Antwort auf die Frage

0
John1024

Versuchen:

find . -type f -name '*.png' -execdir bash -c 'mv "$1" "$@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 $1diesem Name zugewiesen ist. In unserem Fall lautet der Befehl in einfachen Anführungszeichen:

  • mv "$1" "$@2x.png"

    Damit wird die Datei umbenannt mit @2x.png. Das Konstrukt $entfernt das .pngEnde des Dateinamens. Somit $@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 

Nun lassen Sie uns unseren Befehl ausführen:

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

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

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