이름에 ~* 및 기타 특수 문자가 포함된 파일을 찾는 방법은 무엇입니까?
예를 들어
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 '.*[*~]'
찾는 방법은 이러하지만사용된문제의 일부가 아닙니다.
추가 자료:
- 찾기 - 파일 찾기(POSIX)
- find - 디렉토리 계층 구조에서 파일 검색(암소 비슷한 일종의 영양)