이 와일드 카드가 예상대로 작동하지 않는 이유는 무엇입니까?


11

내 사용자 폴더에, 나는 같은 폴더가 D의 ropbox, D의 ocuments를, D ownloads & D UMP.

ls a*이름이로 시작하는 모든 파일을 나열해야합니다 a. 권리? 그러나 명령을 ls d*표시 dump하면 그냥 표시하는 대신 ls of dump 디렉토리가 표시됩니다. 그리고 명령을로 주면 D로ls D* 시작하는 모든 접기의 ls가 표시됩니다.

그래서 내가 이해하지 못한 부분은 무엇입니까?

편집 : 스크린 샷 첨부 ls 스크린 샷

답변:


17

bash 맨 페이지에 따르면 :

bash는 각 단어에서 *,? 및 [문자를 검색합니다. 이러한 문자 중 하나가 나타나면 단어는 패턴으로 간주되고 패턴과 일치하는 알파벳순으로 정렬 된 파일 이름 목록으로 대체됩니다.

그리고 정보 노드에서 ls

`ls '프로그램은 파일에 대한 정보 (디렉토리를 포함한 모든 유형의)를 나열합니다. 옵션과 파일 인수는 평소와 같이 임의로 혼합 할 수 있습니다.

디렉토리 인 옵션이 아닌 명령 줄 인수의 경우 기본적으로 'ls'는 디렉토리의 내용을 재귀 적으로 나타내지 않으며 이름이 '.'로 시작하는 파일은 생략합니다. 옵션이 아닌 다른 인수의 경우 기본적으로`ls '는 파일 이름 만 나열합니다. 옵션이 아닌 인수를 지정하지 않으면 'ls'는 현재 디렉토리의 내용을 나열합니다.

따라서 yo give ls d*이면 d * 는 d로 시작하는 모든 파일 / 디렉토리 이름의 정렬 된 목록으로 확장됩니다. 그래서 당신은 명령이됩니다

ls dump

덤프 디렉토리 이름 그대로 당신은 디렉토리 '덤프'하지만 줄 때 모든 파일의 목록을 얻을 수 있도록 ls D*, D * 로 확대된다 " 데스크톱 문서 다운로드 보관 명령이가되도록을"

ls Desktop Documents Downloads Dropbox

이들 모두가 디렉토리이므로 개별 디렉토리에 파일 목록이 표시됩니다. 현재 디렉토리에 D 로 시작하는 파일이 있으면 별도로 나열되었을 것입니다.


2
사소한 추가 사항 : 둘 이상의 디렉토리가 인수로 제공되면 ls는 컨텐츠를 나열하기 전에 각 디렉토리의 이름을 표시합니다. 단일 디렉토리에는 적용되지 않습니다.
Marcel Stimberg 16:10에

감사! 그것은 나의 의심을 없애었다. 나는 p으로 시작 ls p*하는 파일이 없기 때문에 존재하고 a ls P*Pictures Public 폴더를 보여 주기 때문에 파일을 표시했습니다 . 내가 디렉토리 이름을 만들 때 그리고 똥을 , 그것은에 나타났다ls p*
Ashfame

7

ls d *와 D *는 각각 d *와 D *와 일치하는 파일과 폴더를 나열합니다. 동작은 동일합니다. 테스트에 실수가 있었을 것입니다.

폴더 내용이 아닌 폴더 이름 만 나열하려면 "-d"를 사용해야합니다.

ls -d D*

내가 스크린 샷을 첨부 한보고를 확인하시기 바랍니다
Ashfame

0

위에서 제안했듯이 -d옵션은 갈 길입니다. 첨가

alias ld='ls -d'

~/.bashrc파일에 잘 작동합니다.


3
이 별칭을 사용하면에 대한 액세스를 쉽게 차단 ld - The GNU linker하여 OP가 프로그램을 컴파일하고 연결하지 못하게합니다. alias lsd='ls -d'대신 사용하십시오 . 로 뭔가 별명을하기 전에 foo항상 type foo있는지 확인하기 위해 foo이미 무언가의 이름으로 사용하고, 결정하는 경우 별칭 재정의 이전에 대한 접근의 손실의 편의foo
waltinator
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.