O padrão corresponde a determinados caracteres após a última barra

O padrão corresponde a determinados caracteres após a última barra

Estou tentando fazer o seguinte: listar arquivos ou diretórios contendo determinados caracteres e, a partir da última barra no caminho, procurar caracteres específicos e substituí-los por -.

Eu construí o seguinte em regexpr, mas não faz nada com sed:

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

Responder1

Que tal algo mais limpo como:

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

informação relacionada