ls가 나타내는 파일 이름의 일부가 존재하는 와일드카드입니다.
$ ls *rammar*
London_Grammar_-_Hey_Now_Official_Video-nMEHJPuggHQ.mp4
London_Grammar_-_Hey_Now_Radio_1_s_Big_Weekend_2014-on1QEcz1sTI.webm
London_Grammar_-_Interlude_Live_on_KEXP-7eNA90LlxmY.mp4
파일 이름의 다른 부분에 와일드카드를 사용하면 ls는 해당 파일이 존재하지 않음을 의미합니다.
$ ls *7eNA9*
ls: cannot access `*7eNA9*`: No such file or directory
ls에는 별칭이 없습니다.
반환 코드(통과 echo $?
):
2
남자 LS:
Exit status:
2 if serious trouble (e.g., cannot access command-line argument).
중앙 운영 체제
7.5.1804
세게 때리다
4.2.46(2)
핵심 도구
GNU v8.22
답변1
쉘 와일드카드 패턴은 다음으로 확장됩니다.어느해당 이름이 일반 파일 이름이든 디렉터리 이름이든 일치하는 이름입니다. ls
명령줄에 디렉터리 이름을 지정 하면 해당 내용이 나열됩니다.
ls
for에 의해 보고된 이름 중 하나 이상이 ls *rammar*
패턴과 일치하는 이름을 가진 디렉토리에서 나온 것 같습니다 . 이러한 파일 중 하나가 ls
출력의 마지막 파일입니다.
이것이 두 번째 명령을 시도할 때 파일을 찾을 수 없는 이유입니다. 현재 디렉터리에서는 사용할 수 없습니다.
의견의 핵심 요약:
나는 추천한다
find . -type f -name '*7eNA90*`
파일을 찾을 것이며, *7eNA90*
이 경우 쉘이 파일을 확장하려고 시도하지 않도록(사용되는) 패턴을 인용하는 것이 중요하다고 덧붙였습니다 find
.
@iletras는 이것을 시도했고 효과가 있었지만 그는 또한 그것이 효과가 있다는 것을 발견했습니다.아니요인용 부호. 현재 디렉토리에 패턴과 일치하는 항목이 없으므로 따옴표 없이 작동하므로 쉘은 패턴을 확장하지 않습니다.
그러나 일반적으로 현재 디렉토리에서 사용할 수 있거나 사용할 수 있는 이름을 항상 알거나 기억할 수는 없기 때문에 이 동작에 의존하는 습관을 들이는 것은 위험합니다. 일부 쉘에는 일치하지 않는 패턴을 빈 문자열로 확장하는 쉘 옵션도 있습니다 . nullglob
예를 들어 bash
이 쉘 옵션을 설정하면 패턴이 인용되지 않은 경우 명령이 실패합니다.
단순히 스키마를 참조하는 것이 환경에 의존하는 것보다 안전합니다.