![ls 목록 디렉터리 매개변수가 예상대로 작동하지 않습니다.](https://linux55.com/image/134600/ls%20%EB%AA%A9%EB%A1%9D%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80%20%EC%98%88%EC%83%81%EB%8C%80%EB%A1%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
현재 디렉터리의 모든 디렉터리(파일 아님)만 나열하고 싶습니다. 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 */
. 여기서 와일드카드는 디렉터리로만 확장되고 파일은 제외됩니다.