Dateien suchen und umbenennen

355
RustywithUnix

Ich habe ungefähr 1000 Dateien, die das Zeichen *im Namen enthalten. Ich muss diese Dateien finden und die *durch ein ersetzen -. Ich arbeite mit HP UX v11. Ich verwende den folgenden Befehl

find . -type f -name '*\**' -exec bash -c 'f="$1"; mv "$f" "$"' - '{}' \; 

Mir wurde gesagt, dass es funktioniert, aber für mich wird die komplette Datei in umbenannt, -anstatt die Datei zu ersetzen *.

GNU bash, Version 2.04.0 (1) -release (hppa2.0w-hp-hpux11.00)

2
Stellen Sie sicher, dass Sie es unter BASH ausführen. Können Sie auch Ihre BASH-Version auf Ihrem HP-Host überprüfen? anubhava vor 10 Jahren 0
Vielen Dank, dass ich die Frage mit der bash-Versionsinformation aktualisiert habe RustywithUnix vor 10 Jahren 0
Ok, das ist ziemlich altes BASH. Kannst du laufen lassen? -type f -name '* \ **' `, um zu sehen, ob die richtigen Dateien aufgelistet sind. anubhava vor 10 Jahren 0
Ja, das listet die richtigen Dateien auf. Das Problem liegt in der einmal gefundenen Umbenennung. RustywithUnix vor 10 Jahren 0
Ich habe ein Upgrade auf Bash 4.2 durchgeführt und der ursprüngliche Befehl funktioniert RustywithUnix vor 10 Jahren 1
oh das ist perfekt :) anubhava vor 10 Jahren 0

1 Antwort auf die Frage

0
anubhava

Versuchen Sie diesen Befehl find Befehl:

find . -type f -name '*\**' -exec bash -c 'f="$1"; echo mv "$f" `echo "$f"|tr "\*" "-"`' - '{}' \;