하나의 glob에 여러 와일드카드 사용

하나의 glob에 여러 와일드카드 사용

내 디렉토리에는 다음과 같은 다양한 확장자를 가진 파일 목록이 있습니다.

file-abc-12.out
file-abc-12.csv
file-abc-12.txt
file-xyz-12.out
file-xyz-12.csv
file-xyz-12.txt
file-abc-04.out
file-abc-04.csv
file-abc-04.txt
file-xyz-04.out
file-xyz-04.csv
file-xyz-04.txt

abc를 포함하고 .out으로 끝나는 파일만 나열하려면 어떻게 해야 합니까? 두 개의 패턴 일치 검색 과 을 사용하여 a ls또는 a를 수행하고 싶습니다 . 한 번에 하나만 검색하는 방법만 알고 있습니다. 두 조건을 모두 사용하여 파일 이름을 검색하려면 어떻게 해야 합니까?find*abc**out

답변1

이렇게 하면 원하는 것을 얻을 수 있습니다.

$ find . -name '*abc*' -o -name '*out'

답변2

나는 질문에 사용된 "and"를 엄격한 "논리적 and", 즉 "이름이 일치하는 파일 찾기"로 해석하고 있습니다.둘 다 *abc*그리고 *out".

하나의 파일 이름 글로빙 패턴에 여러 개의 와일드카드를 사용할 수 있습니다.

$ ls *abc*out

또는

$ find . -type f -name "*abc*out"

예를 들어.

패턴은 *abc*out문자열을 포함하고 . abc로 끝나는 모든 이름과 일치합니다 out.

패턴과 일치하는 파일이 없으면 패턴은 확장되지 않은 상태로 유지됩니다. 그런 일이 발생하면 유효한 파일 이름이 아닌 ls패턴을 인수로 가져오고 .*abc*outls: cannot access *abc*out: No such file or directory

bash확장되지 않은 패턴을 에 전달하는 대신 파일 글로빙 패턴을 확장할 수 없다는 오류를 표시 하려면 셸 옵션을 ls설정하세요 failglob.

bash-4.4$ ls *abc*out
ls: *abc*out: No such file or directory

bash-4.4$ shopt -s failglob

bash-4.4$ ls *abc*out
bash: no match: *abc*out

답변3

내가 찾은 솔루션은 grep을 사용하는 것과 관련이 있습니다. 다음과 같습니다:

$ ls *out | grep "abc"

관련 정보