태그 끝에 "(완료)"라고 표시된 디렉토리 목록이 있습니다.
예: "폴더 1(완료)"
rename 명령을 사용하여 각 디렉토리에서 "(done)"을 제거하고 싶습니다. 특수문자이기 때문에 이스케이프 문자를 사용합니다.
rename s/\(Done\)//g *
그러나 이 명령은 작동하지 않습니다. "done"이라는 단어를 제거하고 "Folder 1 ()" 대괄호를 남깁니다.
답변1
\
쉘 구문의 참조 연산자이므로 다음과 같습니다.
rename s/\(Done\)//g *
실행과 동일:
rename 's/(Done)//g' *
and 는 (
문자 그대로 처리하기 위해 접두사를 붙이 거나 and 로 변경해야 하는 )
Perl 정규식 구문( using) rename
의 특수 문자 입니다.\
[(]
[)]
여기에서 원하는 것은 다음과 같습니다.
rename 's/\s*\(Done\)//g' ./*
또한 여기에 추가된 것은 이전 공백 과 접두사 \s*
제거 입니다 . 의 일부 변형은 .(Done)
./
rename
-
답변2
이것은 작동합니다:
rename 's/\(.*\)|\[.*\]//g' *
그렇지 않으면 rename
명령이 사용되지 않습니다(OT).
for file in folder*; do
mv "$file" "${file/\(Done\)/}"
done
답변3
사용 find
:
find topdir -maxdepth 1 -type d -name '* (Done)' -exec sh -c '
for pathname do
mv "$pathname" "${pathname%" (Done)"}"
done' sh {} +
find
이는 이름 끝에 있는 디렉토리를 선택한 다음 표준 매개변수 대체를 사용하여 해당 문자열을 제거합니다.␣(Done)
대상 이름을 가진 디렉터리/파일이 동일한 디렉터리에 존재하지 않는지 확인하기 위한 검사는 수행되지 않습니다.
위 스크립트는 sh -c
테스트 목적으로 약간의 수정을 거쳐 독립형으로 실행할 수도 있습니다 find
.
for pathname in topdir/*' (Done)'/; do
mv "$pathname" "${pathname%' (Done)/'}"
done