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
별표는 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