![rm -rf *(1)*은 무엇을 합니까?](https://linux55.com/image/181436/rm%20-rf%20*(1)*%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9D%84%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
중복된 다운로드를 제거하려고 했으나 실행 오류가 발생했습니다.
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)"*