最後のスラッシュの後の特定の文字にパターンマッチする

最後のスラッシュの後の特定の文字にパターンマッチする

次のことを実行しようとしています: 特定の文字を含むファイルまたはディレクトリを一覧表示し、パスの最後のスラッシュから特定の文字を検索して、それらを . に置き換えます-

regexpr で以下を構築しましたが、何も起こりませんsed:

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

答え1

次のような簡潔なものはどうでしょうか:

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

関連情報