여러 디렉터리의 이름을 바꾸려면 rename 명령을 사용하세요. 이름에는 괄호가 포함됩니다.

여러 디렉터리의 이름을 바꾸려면 rename 명령을 사용하세요. 이름에는 괄호가 포함됩니다.

태그 끝에 "(완료)"라고 표시된 디렉토리 목록이 있습니다.

예: "폴더 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

관련 정보