Musterübereinstimmung mit bestimmten Zeichen nach dem letzten Schrägstrich

Musterübereinstimmung mit bestimmten Zeichen nach dem letzten Schrägstrich

Ich versuche Folgendes: Dateien oder Verzeichnisse auflisten, die bestimmte Zeichen enthalten, dann ab dem letzten Schrägstrich im Pfad nach bestimmten Zeichen suchen und sie durch ein ersetzen -.

Ich habe Folgendes auf regulären Ausdrücken aufgebaut, aber es passiert nichts damit sed:

find . -name "*[<>:\\|?]*" | while read -r; do mv "${REPLY}" \
"`echo ${REPLY} | sed "s/([^/]+$)*([<>:\\|?])/-/g"`"; done

Antwort1

Wie wäre es mit etwas Saubererem wie:

find ... |
while read -r f; do
    dir=$(dirname "$f")
    old_name=$(basename "$f")
    new_name=$(echo "$old_name" | tr '<>:\\|?' '-')
    mv "$dir/$old_name" "$dir/$new_name"
done

verwandte Informationen