
ls -d의 작동 방식을 이해하는 데 어려움을 겪고 있습니다. 나는 다른 ls -d 질문을 읽었지만 그 중 누구도 ls -d *
왜 ls -d */
. 끝에 있는 구분 문자가 왜 그렇게 중요한가요?
ls *
ls */
똑같이 행동 하니까 나도 똑같이 될 거라고 기대했고 ls -d *
, ls -d */
똑같이 일할 거라고 생각했다.
대신
ls -d *
을 수행하는 것처럼 현재 디렉터리의 모든 파일을 나열하는 ls
반면, ls -d */
현재 디렉터리의 디렉터리를 나열합니다. 왜 그럴까요?
답변1
ls *
그리고ls */
똑같이 행동하세요.
아니요, 그렇지 않습니다. 작업 디렉터리에 파일이 있는 경우 첫 번째 명령에는 나열되지만 두 번째 명령에는 나열되지 않습니다.
ls
명령줄에 전달된 파일과 디렉터리(해당 콘텐츠 포함)가 나열됩니다. 쉘 글로빙을 사용하면 쉘이패턴"알파벳순으로 정렬된 파일 이름 목록"(cf파일 이름 확장).
패턴은 *
현재 디렉터리의 모든 파일 및 디렉터리( 로 시작하는 숨겨진 파일 제외 .
)와 일치하지만 */
디렉터리(숨겨진 디렉터리 제외)만 일치합니다.
스위치는 -d
디렉토리의 내용 목록을 비활성화하지만 ls에 전달된 파일은 계속 나열됩니다.
답변2
대답은 다음과 같습니다. 결말은 /
ls가 디렉토리만 보도록 강제합니다.
동작은 일관적입니다( 유무에 관계없이 -d
).
작은 테스트:
mkdir /tmp/test
touch /tmp/test/a
mkdir /tmp/test/b
touch /tmp/test/b/c
cd /tmp/test
그런 다음 실행 ls *
해 보면 ls */
차이점을 알게 될 것입니다.