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