특정 문자(확장자 유무에 관계없이)로 끝나는 파일 이름 찾기

특정 문자(확장자 유무에 관계없이)로 끝나는 파일 이름 찾기

폴더에 여러 개의 파일이 있고 모두 1, 2, 3 등과 같이 서로 다른 버전 번호로 끝납니다. 그들 중 일부는 확장 기능을 가지고 있고 일부는 그렇지 않습니다. ls, find 또는 grep과 같은 명령을 사용하여 확장자로 끝나거나 끝나지 않을 수 있는 특정 문자(예: "1")로 끝나는 모든 파일을 나열할 수 있는 방법이 있습니까?

예를 들어, 한 디렉토리에 다음 과 같은 파일이 있습니다: sum 을 반환 ver1.txt하지만 도움이 되는 경우 sum 을 반환하지 않는 작업을 수행하고 싶습니다 . 비슷한 것을 사용해 보았지만 원하는 효과가 없습니다 ...ver1file.1ver1.txtver1file.1ls *[1.]*

답변1

존재할 수 있는 모든 파일 이름과 검색할 수 있는 모든 패턴의 예를 제공할 수는 없으므로 다음과 같은 정보를 사용하겠습니다.

find . -type f | awk -F / '{print $2}' | grep -v '\.[1-100]$'

ver1.txt, ver1및 을 file.1검색하려는 디렉터리의 파일로 지정했다는 점을 고려하면 위 명령은 원하는 출력을 반환합니다.

ver1.txt
ver1

각 부분을 설명하세요.

find . -type f현재 디렉터리의 모든 파일을 반환합니다.

awk -F / '{print $2}'./명령 에 나타나는 각 파일의 시작 부분을 삭제합니다.find

grep -v '\.[1-100]$'.#where 에서 #숫자로 끝나지 않는 모든 파일을 반환합니다 1-100. 스위치는 v일치하지 않는 행을 찾습니다. 제공된 예제의 경우 이스케이프를 사용 하고 문자열 주위에 작은따옴표를 사용해야 .#합니다 . 이 문자열로 끝나는 파일을 나타내지만 , 귀하의 경우 이 문자열 없이도 작동합니다. 파일 이름의 다른 위치에 파일이 있을 수 있는 경우에만 포함합니다 .\.$.

찾고 있는 항목에 따라 매개변수를 변경해야 하지만 이렇게 하면 시작됩니다.

답변2

순수한 find:

find . -regex '\.[^.]*1\|.*1\.[^.]*'

이것은 일치 ver1하고 ver1.txt그리고 file1.ver1.txt그러나아니요 file1.ver2.txt. 또한 일치시키려는 경우:

find . -regex '\.[^.]*1\|.*1\..*'

검색 디렉터리에서 이러한 명령을 실행해야 find somepath ...하지만 정규식이 전체 경로와 일치하기 때문에 작동하지 않습니다.

관련 정보