ls 명령에서 별표 동작에 대해 혼란스러워함

ls 명령에서 별표 동작에 대해 혼란스러워함

Centos와 Debian에서 나는 이것을 시도했습니다.

ls 명령의 *는 재귀 검색을 의미합니까?

디렉토리 이름을 입력하고 탭을 누르면 다음과 같은 내용이 표시됩니다.

# ls /etc/rc<tab>
rc0.d/    rc1.d/    rc2.d/    rc3.d/    rc4.d/    rc5.d/    rc6.d/    rc.local  rcS.d/

경로에 별표를 넣으면 같은 내용이 표시될 것이라고 생각했지만 대신 재귀 검색을 수행했습니다.

# ls /etc/rc*
/etc/rc.local

/etc/rc0.d:
K50netconsole  K90network

/etc/rc1.d:
K50netconsole  K90network

/etc/rc2.d:
K50netconsole  S10network

/etc/rc3.d:
K50netconsole  S10network
...

Windows dir 명령은 /etc/rc*와 일치하는 디렉토리를 표시합니다. 어떻게 ls에서 이 동작을 얻을 수 있습니까(탭 키를 사용하지 않고)?

****수정/업데이트:

좋아, 이제 *가 명령 대신 bash에 의해 해석된다는 것을 이해하지만 항상 "파일 및 폴더 항목 열거"로 해석됩니까? 아니면 다른 컨텍스트에서 사용하면 다른 작업을 수행합니까? 그렇다면 큰 일이 있습니까? bash의 if 문은 "파일 시스템 경로와 함께 사용된 경우 파일 및 폴더 이름을 반환하고, rpm과 함께 사용된 경우(예:rpm -qa 포스트*) 패키지 이름 등을 반환합니다."

답변1

Asterisk는 명령에 도달하기 전에 확장되므로 ls이는 다음과 같습니다.

ls /etc/rc0.d    /etc/rc1.d   /etc/rc2.d    /etc/rc3.d    /etc/rc4.d ...

그러면 각 디렉토리의 내용이 별도로 나열됩니다.

를 사용하여 ls -d /etc/rc*디렉토리 내부의 파일 나열을 억제하거나 확장만 표시하는 명령(예: echo /etc/rc*.

답변2

기본적으로 디렉터리 인수를 사용하여 호출하면 ls디렉터리 내용이 표시됩니다. 옵션 을 사용하여 해당 동작을 변경할 수 있습니다 -d. 에서man ls

-d, --directory
       list  directory entries instead of contents, and do not derefer‐
       ence symbolic links

관련 정보