시도 ls /etc/[ac]*
했지만 " a "또는 " c "로 시작하는 파일이 아니라 a 또는 c로 시작하는 디렉토리와 전체 내용이 표시 됩니다.
ls -d /etc/[ac]*
일치하는 디렉토리의 내용을 나열하며 일치하는 디렉토리의 내용은 얻지 못하지만 디렉토리 이름은 계속 볼 수 있습니다. 이것이 원하는지 또는 디렉토리 이름을 나열하지 않으려는지 확실하지 않습니다.
시도 ls /etc/[ac]*
했지만 " a "또는 " c "로 시작하는 파일이 아니라 a 또는 c로 시작하는 디렉토리와 전체 내용이 표시 됩니다.
ls -d /etc/[ac]*
일치하는 디렉토리의 내용을 나열하며 일치하는 디렉토리의 내용은 얻지 못하지만 디렉토리 이름은 계속 볼 수 있습니다. 이것이 원하는지 또는 디렉토리 이름을 나열하지 않으려는지 확실하지 않습니다.
답변:
디렉토리의 내용을 나열하지 않으려면 다음을 수행하십시오.
ls -d /etc/[ac]*
디렉토리 이름 과 a
또는로 시작하는 일반 파일 이름 이 나열됩니다 c
.
완벽을 기하기 위해 관련없는 솔루션 find
은 다음과 같습니다.
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9
ls -d
적절 해 보였지만 원래 질문은 확장 또는 비 확장에 관계없이 디렉토리를 나열하지 않아야한다고 지정합니다.
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9
파싱하지 마십시오 ls
.
ls
것은 제 생각에는 공정한 게임입니다.
/etc
제정신 일 가능성이 매우 높지만 ls
필드 번호가 변경되므로 간단한 공백으로 인해 접근 방식 이 중단 됩니다. ls -ld
그래도 +1입니다 .
LC_ALL=C
) 을 수정해야하며 날짜는 다른 로케일에 3 개의 필드가 있다고 보장되지 않습니다.
재귀 적으로 :
find /etc -type f -name '[ac]*'
비 재귀가 필요한 경우이 작업을 수행 할 수 있습니다.
find /etc/. ! -name . -prune -type f -name '[ac]*'
또는 이것은 이식성이 없습니다 (GNU 또는 최근 BSD 찾기).
find /etc -type f -maxdepth 1 -name '[ac]*'
이 대소 문자를 구분하지 않으려면 -iname
대신을 사용하십시오 -name
.
-type f
위한 일반 파일 . 디렉토리가 아닌 파일이 필요한 경우에는 ! -type d
(또는 디렉토리에 대한 심볼릭 링크를 제외하려는 경우 ! -xtype d
GNU로) 대체하십시오 find
.
디렉토리의 내용이 아닌 디렉토리와 파일을 모두 원한다면 printf
bultin 을 사용할 수 있습니다 .
printf "%s\n" [ac]*
예:
$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt
로 zsh
:
print -rl /etc/[ac]*(.)
대상 목록겠습니까 일반 (같이 파일 -type f
에 find
나열된) /etc
이름이 시작과 함께 a
또는 c
. (xxx)
glob의 끝에 있는 부분은 globbing 한정 자라는 zsh 관련 기능입니다. .
globbing 한정자로 일반 파일을 의미 합니다 .
글로브가 일치하지 않으면 zsh
명령이 중단됩니다. 다른 Bourne과 같은 쉘에서 glob가 일치하지 않으면 패턴이 자체로 확장되므로 또는 로 시작하는 파일이 없으면 ls -d /etc/[ac]*
호출 된 파일을 잘못 나열 할 수 있습니다./etc/[ac]*
a
c
/etc
print -rl /etc/[ac]*(^/)
디렉토리 유형 이 아닌 파일을 나열 하고
print -rl /etc/[ac]*(-^/)
심볼릭 링크를 해결 한 후 디렉토리 유형이 아닌 파일을 나열합니다.