확장자 없이 8자 이름을 가진 모든 파일을 나열하려고 합니다.
내 문제는 "."가 중간에 있는 "test.txt" 파일에서 시작됩니다.
나는 ls를 수행하고 출력을 파일로 리디렉션한 다음 grep을 사용하여 필요한 파일을 얻으려고 시도했지만 알고 싶습니다.
ls/grep/redirection/extglobs 등을 사용하여 한 줄로 이 작업을 수행할 수 있습니까?
답변1
grep을 사용하면 다음을 제외한 8자를 일치시킬 수 있습니다 .
.
$ ls | grep '^[^.]\{8\}$'
또는 파이프에 문제가 있는 경우:
$ find . -regex '.*/[^.][^.][^.][^.][^.][^.][^.][^.]'
또는 많은 쉘에서 간단하게:
$ ls -d [^.][^.][^.][^.][^.][^.][^.][^.]
답변2
?
이를 사용하여 대부분의 셸에서 단일 문자를 일치시킬 수 있습니다 .
$ GLOBIGNORE='*.*' eval "ls -d ????????"
이 경우 변수는 파일 이름이 포함되지 GLOBIGNORE
않도록 와일드카드를 부트스트랩하고 플래그는 디렉터리 이름을 일치시킬 때 콘텐츠 나열을 방지합니다. 자세한 내용을 보려면 사용하세요 ..
-d
man bash
답변3
ls [a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]
길이가 8자이고 영숫자만 포함하는 모든 파일 이름(하이픈, 마침표 등 없음)
답변4
의견을 주신 모든 분들께 감사드립니다. 몇 시간 후에 제가 하고 싶은 일이 무엇인지 알게 되었습니다.
$ ls -d !(!(??????)|*(*.*))
이것이 작동하려면 extglob을 설정해야 합니다.