확장자를 무시하고 문자로 끝나는 파일을 찾으려면 ls를 사용하십시오.

확장자를 무시하고 문자로 끝나는 파일을 찾으려면 ls를 사용하십시오.

특정 문자로 끝나는 파일을 찾으려면 ls를 사용해야 하지만 파일에 확장자가 있는지는 중요하지 않습니다.

예를 들어 이렇게 하고 싶어요

> ls test test.txt test.ascii other.txt

> ls [something] test test.txt test.ascii

이렇게 하면 "t"로 끝나는 파일은 찾을 수 있지만 확장자가 t로 끝나는 파일은 찾을 수 없습니다.

편집: 파일 이름의 유일한 마침표 문자는 확장자용이고 다른 문자는 없다고 가정해야 합니다.

답변1

뭔가 =

 |grep -e ".*t\.[^.]*" -e "^[^.]*t$"

답변2

bash셸을 사용하는 경우 이 extglob옵션을 사용하여 복잡한 필터링을 수행할 수 있습니다. 예를 들어:

해결책:

bash$ shopt -s extglob

bash$ ls
other.txt  test  test.ascii  test.txt

bash$ ls *@(t.*|[^.]?[[:alnum:]]t)
test  test.ascii  test.txt

설명하다:

PATTERN1은 (t.*)"t"로 끝나고 뒤에 파일 확장자가 오는 모든 파일과 일치합니다.

bash$ ls *@(t.*)
test.ascii  test.txt

PATTERN2는 ([^.]?[[:alnum:]]t)마침표가 없고 그 뒤에 0개 이상의 영숫자가 오고 "t"로 끝나는 모든 파일과 일치합니다. 파일 확장자가 없는 파일과 일치합니다.

bash$ ls *@([^.]?[[:alnum:]]t)
test

이 glob은 @(PATTERN1|PATTERN2)모든 패턴과 한 번만 일치합니다. 결합된 패턴은 우리가 찾고 있는 것만 필터링합니다.

Bash 모드에 대한 자세한 내용은 다음을 참조하세요.http://wiki.bash-hackers.org/syntax/pattern

답변3

점(확장자)이 하나만 있는 파일이 필요하고
현재 디렉터리(./)에서 검색해야 한다고 가정하면 다음을 사용할 수 있습니다.

$ find . -maxdepth 1 -type f -regex './[^.]*t\(\.[^.]*\)?'
./test.txt
./test.ascii
./test

이것은 작동하지만 디렉토리를 포함합니다(파일 이름에 줄 바꿈이 있으면 실패합니다).

$ printf '%s\n' * | grep -e ".*t\.[^.]*" -e "^[^.]*t$"
test
test.ascii
test.txt
tt

개행 문자가 포함된 파일 이름을 허용하려면 (GNU grep)을 사용하십시오.

$ printf '%s\0' * | grep -ze ".*t\.[^.]*" -e "^[^.]*t$" | xargs -0
test test.ascii test.txt tt

관련 정보