ls 목록 디렉터리 매개변수가 예상대로 작동하지 않습니다.

ls 목록 디렉터리 매개변수가 예상대로 작동하지 않습니다.

현재 디렉터리의 모든 디렉터리(파일 아님)만 나열하고 싶습니다. ls -ld ./*매뉴얼 페이지에 명시된 디렉토리만 반환할 것으로 예상됩니다.

내용 대신 디렉토리 나열

현재 이 명령은 현재 디렉터리의 모든 파일과 디렉터리를 반환합니다.

또는 내 요구 사항을 충족하는 다음 명령이 있지만 동일한 요구 사항을 충족하는 기본 제공 옵션이 있는지 궁금합니다.

ls -lF ./ | grep ".*/$"

답변1

-d플래그는 디렉토리로 내려가는 것을 방지하지만 ls이것이 바로 그 역할입니다. 이것은 단순히 디렉토리를 나열한다는 의미가 아닙니다. 이 두 명령문 사이에는 미묘한 차이가 있으며, ls -d some_file이는 를 실행하면 ls표시됩니다 some_file. 쉘 와일드카드( ./*)를 사용하고 있으므로 와일드카드는 현재 디렉터리의 파일뿐만 아니라 현재 디렉터리의 디렉터리도 포함하도록 확장됩니다. 쉘은 대신 와일드카드와 확장을 수행하므로 ls쉘은 ls파일 목록을 수신합니다.

이 문제를 해결하려면 쉘 glob에 일반 파일이 포함되어 있지 않은지 확인해야 합니다. /glob에 후행을 사용하여 이 작업을 수행 할 수 있습니다 . 파일명에 금지된 특수문자이지만 디렉터리 간의 구분을 나타내기 때문에 /디렉터리만 일치시키는 데 사용할 수 있습니다.

예를 들어:

ls -d */

답변2

이는 쉘에 따라 다를 수 있습니다.

대부분의 최신 POSIX 호환 쉘은 별표 뒤에 슬래시를 추가하는 경우에만 디렉토리를 나열합니다.

echo */

따라서 전화를 하면:

ls -l */

예상한 목록을 얻을 수 있습니다.

디렉토리의 내용을 보고 싶지 않으시면 다음으로 전화해 주십시오.

ls -ld */

답변3

기본적으로 내 혼란은 ls -ld ./*Dint가 dirs만 반환하는 이유입니다. ls 인수에는 나열하려는 디렉터리가 필요합니다. 그리고 쉘은 모든 파일과 디렉토리에 대한 인수를 평가하므로 */(와일드카드로 인해) 하위 디렉토리 아래의 파일을 포함하여 모든 것이 나열됩니다. 많은 분들이 제안하는 해결책은 다음과 같습니다 ls -ld */. 여기서 와일드카드는 디렉터리로만 확장되고 파일은 제외됩니다.

관련 정보