이름에서 특수 문자 찾기

이름에서 특수 문자 찾기

이름에 ~* 및 기타 특수 문자가 포함된 파일을 찾는 방법은 무엇입니까?

예를 들어

find . -name "*\*"

그러면 "모든 문자"와 일치해야 *하지만 아무것도 일치하지 않습니다. 명령이 파일과 올바르게 일치하도록 하려면 어떻게 해야 합니까?

답변1

구현은 다르지만 find모두 와일드카드로 문자 클래스를 처리해야 합니다(POSIX.2, 섹션 3.13).

find . -name '*[~*]*'

개행 문자가 "특수" 문자 중 하나인 경우 셸에서 이를 찾기 위해 전달하는 방법을 알아내야 할 수도 있습니다. Bash에서는 다음을 사용할 수 있습니다.

find . -name $'*[\t \n]*'

예를 들어 공백이 포함된 파일을 표시합니다. 더 쉬운 방법은 지원되는 경우 문자 클래스를 사용하는 것입니다.

find . -name '*[[:space:]]*'

답변2

특정 문자를 일치시키는 것보다 더 일반적인 것을 원한다면 정규식을 사용해야 합니다. 질문에 "linux" 태그가 지정되지 않았으므로 정답은 POSIX를 사용합니다.

find . | grep '[*~]'

Linux에만 적용되도록 하려면 GNU find옵션을 사용할 수 있습니다 -regex(또한 지원됨).FreeBSD). 경로 이름에 개행 문자가 포함된 경우(희귀한완료되었으나 다음과 같이 사용됩니다.자주반례) POSIX find+는 grep작동하지 않습니다. 그러나 -regex확장하면 개행 문자가 포함된 이름을 "인쇄할 수 있습니다".

find . -regextype posix-awk -regex '.*[*~]'

찾는 방법은 이러하지만사용된문제의 일부가 아닙니다.

추가 자료:

관련 정보