GNU 찾기: 동일한 명령에서 -o(또는) 및 -print0을 사용하면 예상된 결과가 제공되지 않습니다.

GNU 찾기: 동일한 명령에서 -o(또는) 및 -print0을 사용하면 예상된 결과가 제공되지 않습니다.

요약: 여러 패턴을 일치시키기 위해 -print0옵션 find-o옵션을 올바르게 결합하는 방법은 무엇입니까? (사용 사례가 전달됨 xargs -0)

예:

find . -print0 -name "File*.dat" -o -name "Data*.txt"
find . -print0 -name "File*.dat" -o -print0 -name "Data*.txt"

둘 다 돌아옴파일당디렉토리에.

find . -name "File*.dat" -o -name "Data*.txt" -print0

이 반환오직두 번째 패턴( ) Data*.txt과 일치하는 파일입니다 .

이 작업을 올바르게 수행하려면 어떻게 해야 하며 왜 이런 일이 발생합니까?

답변1

인용 문제와 그룹화 문제가 있습니다. "와일드카드 일치를 위해 쉘을 초대하려면 " "를 사용하십시오 . 일치하는 파일이 있거나 현재 디렉터리에 있으면 와일드카드 문자가 대체됩니다. 대신 " '"을(를) 사용하세요.
그룹화는 ()쉘 이스케이프가 필요한 대괄호 " "를 통해 수행됩니다.
당신의 명령은 다음과 같습니다.

find . \( -name 'File*.dat' -o -name 'Data*.txt' \) -print0

읽다 man find.

관련 정보