ls -ad */는 숨겨진 디렉토리를 표시하지 않습니다.

ls -ad */는 숨겨진 디렉토리를 표시하지 않습니다.

pwd내 홈 디렉토리입니다. ls */ -d디렉토리를 표시합니다.

~$ ls */ -d
Blog/  Desktop/  Documents/  Downloads/  Music/  Pictures/  Public/  Templates/  Videos/

ls -a숨겨진 디렉터리와 파일을 모두 표시합니다 . 숨겨진 디렉토리 .cache- .local

$ ls -a
.                        .cache      .gnupg       .xsession-errors.old
..                       .config     .gtkrc-2.0   Templates
.bash_history            Desktop     .gtkrc-xfce  Pictures      .themes
.bash_logout             .linuxmint   .pki          Videos
.bashrc                  Documents   .local       .profile      .viminfo
Blog                     Downloads   .mozilla     Public        .Xauthority
Music        .ssh          .xsession-errors

하지만 실행하면 ls -ad */숨겨진 디렉터리가 표시되지 않습니다. 누구든지 설명해 주실 수 있나요?

$ ls -ad */ 
Blog/  Desktop/  Documents/  Downloads/  Music/  Pictures/  Public/  Templates/  Videos/

답변1

를 실행하면 ls -a명령줄에 파일 이름이 없으므로 ls( 그림 참조 ls) 어떤 파일 이름이 나열되어야 하는지 자체적으로 파악합니다. 지정된 이후 "숨겨진" 파일 표시를 포함합니다 -a.

ls -d */and를 실행하면 ls -ad */쉘이 확장되어 */표시될 파일 이름 목록을 제공합니다 ls.*파일 이름 패턴 시작이 일치하지 않습니다..이므로 숨겨진 파일은 포함되지 않습니다. 와 */함께 사용하면 여기서는 아무런 효과가 없습니다.-d-a

숨겨진 디렉터리를 보려면 해당 디렉터리를 명시적으로 나열할 수 있습니다 ls -d -- */ .*/. 일부 셸에서는 숨겨진 파일에 대한 일치를 요구할 수도 있습니다 *. 예를 들어 Bash에서는 다음을 사용합니다 (이 경우에는 및 가 shopt -s dotglob포함되어 있지 않으므로 와 유사하게 작동합니다 )....ls -A

또한 --파일 이름이 로 시작하는 경우 옵션으로 간주되지 않도록 옵션 끝을 표시하는 것을 잊어버렸습니다 -. */목차도 포함되어 있으니 참고하세요및 디렉토리 심볼릭 링크. 를 사용하면 각 파일에 후행을 추가 하지 않고 디렉터리(숨겨진 디렉터리 포함)만 나열 zsh할 수 있습니다 . 또는 디렉토리에 대한 심볼릭 링크를 정말로 원하는 경우.ls -d -- *(D/)D/*(D-/)

답변2

* 의도적으로대부분의 경우 우리가 원하는 것이기 때문에(점 파일과 디렉터리는 일반적으로 데이터가 아닌 구성에 사용되기 때문에) 숨겨진 파일이나 디렉터리와 일치하지 않으며 .if/ Worth로 시작하는 glob을 명시적으로 지정하여 기본값을 재정의할 수 있습니다. 필요할 때 사용하세요.

glob으로 일치시키려는 경우 ls -d .*(또는 ls -d .*/일반 파일 없이 숨겨진 디렉터리만 일치시키려면)를 사용하십시오. 숨겨진 디렉토리와 숨겨지지 않은 디렉토리를 일치시키려면 다음을 사용하십시오.ls -d -- */ .*/

참고: @rexkogitans가 의견에서 언급했듯이 글로브는 *셸에 의해 확장된 것과 같습니다.앞으로그들은 프로그램에 전달됩니다. 또는 (또는 ) ls을 볼 수 없으며 glob의 쉘 확장 결과인 파일 및/또는 디렉토리 이름 목록을 볼 수 있습니다. 이것이 바로 프로그램에 문자열 리터럴로 전달하려는 경우 전역 문자를 인용하거나 이스케이프(백슬래시를 접두사로 사용하여)해야 하는 이유입니다.*.*.*/

또한 참고: glob과 일치하는 파일/디렉토리가 없는 경우 glob은 확장되지 않은 상태로 프로그램에 전달됩니다(즉, 인수 ls로 처리됨 ). (및 일부 다른 bourne 유사 쉘)에서는 이 동작을 무시할 수 있습니다. 예를 들어 bash에서는 또는 쉘 옵션을 사용할 수 있습니다. nullglob을 사용하면 빈 상태로 확장(즉, 인수 목록에서 제거)되는 반면, Failglob은 오류를 트리거합니다.*bashnullglobfailglob

답변3

어디에서도 잘 설명되지 않는 짧은 대답은 in 을 사용할 때   /  가 무시된다는  것입니다 ls.  왜냐하면  /는 디렉토리 내용이 표시(나열)되고  전달 되는 방식을 제어하기 때문입니다.-a-A-d-a-Als-d아니요디렉토리의 내용을 나열합니다.

관련 정보