`ls -d */`와 `ls -d *`의 차이점은 무엇입니까?

`ls -d */`와 `ls -d *`의 차이점은 무엇입니까?

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 */차이점을 알게 될 것입니다.

관련 정보