내 디렉토리에는 다음과 같은 다양한 확장자를 가진 파일 목록이 있습니다.
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 또는 a를 수행하고 싶습니다 ls
. 한 번에 하나만 검색하는 방법만 알고 있습니다. 두 조건을 모두 사용하여 파일 이름을 검색하려면 어떻게 해야 합니까?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"