
다음 작업을 수행하려고 합니다. 특정 문자가 포함된 파일이나 디렉터리를 나열한 다음 경로의 마지막 슬래시에서 특정 문자를 검색하고 -
.
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