특정 문자로 끝나는 파일을 찾으려면 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