"find" 명령의 표현식이 셸에서 해석되지 않도록 보호하는 방법은 무엇입니까?

"find" 명령의 표현식이 셸에서 해석되지 않도록 보호하는 방법은 무엇입니까?

이 명령을 쉘에서 실행하고 싶습니다 find . '! -name *.*'. bash예상대로 작동하지 않습니다. ( -name *.*현재 디렉토리에 있는 false인 모든 파일, 즉 이름에 점이 없는 파일을 나열해야 합니다 .) 대신 역설적이게도 줄 끝으로 디렉토리에 있는 모든 파일 목록을 인쇄합니다 find: "! -name *.*": file or directory not found. 두 개의 어포스트로피(U+0027) 문자로 보호되어 있지만 문제는 표현식에 대한 쉘의 해석에 있는 것 같습니다. 표현을 보호할 방법이 있나요?안정적으로어떤 표현이든요?

저는 이 버전을 사용합니다: find(GNU findutils) 4.4.2

답변1

OP가 expr을 인용했기 때문에 '! -name *.*'두 번째 매개변수가 됩니다 find. 이제 find아이디어는 2디렉토리 이름, 즉 .이상한 이름을 전달하여 ! -name *.*두 파일/하위 디렉토리를 재귀적으로 충실하게 나열하려고 시도한다는 것입니다. 지금까지는 .훌륭했지만 이제 광기의 카탈로그에 대해 더 깊이 알아볼 시간입니다. ! -name *.*당신이 그것을 가지고 있지 않으면 그것은 할 수 없습니다. 그래도 find원하는 대로 되지는 않습니다.

이렇게 하려면 적절한 위치에 견적을 작성해야 합니다.

find . ! -name '*.*'

또는

eval find . '! -name "*.*"'

답변2

표현식 주위에 작은따옴표를 넣어보세요.

find . ! -name '*.*'

관련 정보