Umbenennen mehrerer Dateien, die dem UNIX-Suchschlüsselwort entsprechen

Umbenennen mehrerer Dateien, die dem UNIX-Suchschlüsselwort entsprechen

Ich habe die folgende Ausgabe vom Find-Befehl zum Suchen von Dateien, die yyydiesen Namen enthalten:

./plonetheme/xxx/yyy-logo.png
./plonetheme/xxx/profiles/default/plonetheme.yyy_various.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_images
./plonetheme/xxx/skins/plonetheme_yyy_custom_images/CONTENT.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates/CONTENT.txt
./plonetheme/xxx/skins/plonetheme_yyy_custom_templates/main_template.pt
./plonetheme/xxx/skins/plonetheme_yyy_styles
./plonetheme/xxx/skins/plonetheme_yyy_styles/base_properties.props
./plonetheme/xxx/skins/plonetheme_yyy_styles/CONTENT.txt

Wie kann ich alle Dateien umbenennen, sodass die Zeichenfolge yyydurch ersetzt wird zzz?

Antwort1

Sie könnenBash-Zeichenfolgenmanipulationum das zu erreichen, was Sie wollen:

find PATH/PATTERN -exec bash -c 'mv "$0" "${0/yyy/zzz}"' {} \;

Der -execSchalter führt den Befehl bis zum Escapezeichen aus ;, wobei {}der Pfad der aktuell verarbeiteten Datei ist.

bash -c 'mv "$0" "${0/cix/stix}"' {}übergibt diesen Pfad als Argument an Bash, das $0(das erste Argument, z. B. ./plonetheme/xxx/yyy-logo.png) zum ${0/yyy/zzz}(ersten manipulierten Argument, z. B. ./plonetheme/xxx/zzz-logo.png) verschiebt.

Antwort2

Wie beschriebenHierkönnen Sie -print0und verwenden read -r -d'':

find /path/to/files -type f -print0 | while IFS= read -r -d '' file; do
    mv "$file" "${file/yyy/zzz}"
done

verwandte Informationen