내 디렉토리에는 다음과 같은 다양한 확장자를 가진 파일 목록이 있습니다.
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*out
ls: 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"