"ls .*"가 숨겨진 디렉터리의 내용을 표시하는 이유는 무엇입니까?

"ls .*"가 숨겨진 디렉터리의 내용을 표시하는 이유는 무엇입니까?

ls .*숨겨진 디렉토리의 내용이 인쇄되는 이유는 무엇입니까 ? 숨겨진 파일을 인쇄하고 싶은데 이제 알 수 있습니다. 숨겨진 파일만 표시해결책이지만 디렉토리의 내용이 표시되는 이유를 여전히 알고 싶습니다. 추가로 중첩된 디렉터리의 내용은 표시되지 않습니다.

ls .*아래는 내 홈 디렉터리의 일부 출력입니다.

.bash_history
.bash_profile
.bashrc
.coin_history
.emacs
.gitconfig
.gitignore_global
.grasp_jss

.ssh:
config          github_rsa.pub  id_rsa.pub      known_hosts.old
github_rsa      id_rsa          known_hosts     lambda.pem

.vim:
colors   ftdetect syntax

이 머신은 RHEL을 실행 중입니다. Mac OSX에서도 비슷한 동작이 관찰됩니다.

답변1

짧은 대답: 쉘 전역 확장.

쉘은 입력을 받아 .*해당 부분을 전달하기 전에 확장하므로 ls기본적으로 다음을 수행하게 됩니다.

$ ls .bash_history .bash_profile .bashrc .coin_history .emacs ...

따라서 각 항목이 나열됩니다. 디렉토리 항목을 보면 예상한 대로 해당 디렉토리의 내용이 나열됩니다 ls. 작업 디렉터리의 파일/디렉터리만 보려면 -d다음 옵션을 사용하세요 ls.

$ ls -d .*

-d옵션은 ls"내용이 아닌 디렉토리 자체를 나열합니다"( ls맨 페이지에서 가져옴)를 지시합니다.

답변2

ls .*숨겨진 디렉토리의 내용이 인쇄되는 이유는 무엇입니까 ?

ls디렉토리가 주어지면 해당 디렉토리의 내용을 인쇄합니다(기본적으로 해당 디렉토리의 숨겨진 파일은 제외) . 에 의해 ls .*쉘은 ls다음으로 시작하는 파일 및 디렉토리 목록을 제공합니다..

를 사용하면 set -x셸에서 호출된 명령을 볼 수 있습니다(즉, 셸 glob이 확장된 후).

답변3

당신이 할 때

$ ls directory

당신이 얻을 목록입니다 directory. 디렉토리 이면 directory그 내용이 나열되고, 그렇지 않으면 다른 파일처럼 나열됩니다.

당신이 할 때

$ ls dir*

일치하는 모든 콘텐츠 목록이 표시됩니다 dir*. 이들 중 하나라도 디렉터리인 경우 해당 디렉터리의 내용이 표시됩니다.

당신이 할 때

$ ls .*

패턴만 다를 뿐 이전 예와 동일한 효과를 얻을 수 있으며, 숨겨진 파일 및 폴더를 명시적으로 일치시키므로 이러한(일치하는 파일 및 폴더)이 고려됩니다 ls.

폴더의 내용(숨겨졌든 아니든)을 보고 싶지 않다면 ls해당 플래그를 사용하세요. 지정한 패턴과 일치하는 발견된 폴더로의 반복이 -d중지됩니다 .ls

답변4

구체적으로 말씀해주셨기 때문입니다. Shell glob 확장 부분이 분명하다면, 정말로 필요한 대답은 질문 뒤에 숨은 혼란을 고려한 대답이라고 생각합니다.

당신은 ls가 제공하는 것과 ls가 제공하는 것을 혼동하고 있습니다. ls는 숨겨진 디렉터리/파일을 제공하지 않지만 숨겨진 디렉터리/파일 목록을 제공할 수 있습니다. .*독점적으로 사용하여 수행합니다( 강조 하지 .않음 *).

관련 정보