rm -rf *(1)*은 무엇을 합니까?

rm -rf *(1)*은 무엇을 합니까?

중복된 다운로드를 제거하려고 했으나 실행 오류가 발생했습니다.

rm -rf *(1)*

이로 인해 모든 것이 제거되었으며 ~/Downloads오류 메시지가 없습니다.

이 정규 표현식의 역할은 정확히 무엇인가요?

답변1

POSIX 쉘에서 괄호는 (cmd1; cmd2; cmd3) 서브쉘에서 내부 명령을 생성하기 위해 예약되어 있습니다. 이는 *(1)*대괄호 안의 별표가 개행이나 세미콜론으로 구분되지 않기 때문에 구문 오류입니다. 물론, *;(1);*그 자체로는 문법적 오류는 아니지만 말이 되지 않습니다.

배쉬에서는 만약extglob활성화되었습니다. 을(를) 통해 확인할 수 있습니다 shopt -p |& grep extglob."*(pattern-list)주어진 패턴의 0개 이상의 발생과 일치합니다.”. 이 경우 *(1)* 항상 확장하십시오.모두*(1)패턴이 전혀 일치하지 않을 수 1있고 *다른 모든 이름은 무엇이든 상관없이 일치하므로 디렉터리의 파일은 일치합니다. 결과적으로 모든 파일(및 디렉터리, 파일)이 삭제됩니다.

또한 셸은 정규식과 다른 셸 패턴(glob이라고 함)을 사용합니다. 바라보다자일스의 대답자세한 지침. 귀하의 경우 이름에 포함된 모든 파일을 삭제하려면 (1)문자 그대로의 의미를 유지하기 위해 대괄호를 이스케이프하거나 인용해야 합니다.

rm -rf *'(1)'*
rm -rf *\(1\)*
rm -rf *"(1)"*

관련 정보