한 디렉토리에서 ls -l * .xml 명령이 작동하지 않는 문제


2

이상한 문제가 발생했습니다. ls -l *.xml특정 디렉토리에서 실행하려고 하는데이 작업을 수행 하면 메시지가 나타납니다.

ls: invalid option -- .
Try ls --help' for more information.

위와 같은 잘못된 옵션 메시지가 표시되는 동일한 디렉토리에서 비슷한 작업을 수행 ls -l *.php하거나 ls -l *.txt제대로 작동하는 경우 나에게도 낯선 점은 ls -l *.xml다른 디렉토리에서 작업하면 제대로 작동하며 한 디렉토리에서와 같이 잘못된 옵션 메시지를 표시하지 않는다는 것입니다.

ls -l *.xml디렉토리에서 루트 및 일반 로그인으로 시도했지만 동일한 잘못된 옵션 메시지가 표시됩니다.

type ls
ls is aliased to `ls --color=tty'

which ls
alias ls='ls --color=tty'
    /bin/ls

whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

나는 내 마음을 잃고 있습니까? 무엇이 잘못 될 수 있습니까? ls -l *.xml한 디렉토리에서는 작동하지 않지만 다른 디렉토리에서는 제대로 작동하는 이유는 무엇 입니까?

편집하다:

greps 배관 ls -l을 시도했지만이 오류가 발생했습니다. 그래도 ls -l *.xml다른 디렉토리에서 아무런 문제없이 작동 하므로 grep으로 파이프 해야하는 이유를 모르겠습니다 . 전에 그것을 잡을 필요가 없었습니다.

ls -l | grep .xml
grep: invalid option -- .
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

디렉토리에 어떤 파일이 있습니까? 우리에게 부여 ls -la하시기 바랍니다. 이름이 시작 --하거나 비슷한 파일이 있다고 생각 합니다.
slhck 2016 년

그렇습니다. 바로 그게 문제였습니다. 디렉토리의 전체 내용을주의 깊게 살펴본 후 문자 그대로라는 파일을 찾았습니다 -.xml. 파일 이름의 대시로 인해 문제가 발생한 것 같습니다. 실제로 파일 rm -.xml이름이 rm실패 했기 때문에 파일을 삭제할 수도 없었습니다 . 그래픽 SFTP 클라이언트를 통해 디렉토리로 이동하여 삭제해야했습니다. 파일이 제거되면 모두 다시 작동하는 것 같습니다.
Merrick Dennis

몇 가지 빠른 관찰. ' - '는 일반 조합 순서에서 영숫자보다 앞에옵니다. 따라서 -.xml 은 일반적으로 bash 가 파일 마스크를 확장 할 때 처음입니다 . 이는 ls 가 매개 변수를보기 전에 수행 됩니다. 확장 된 파일 이름을 입력 된 문자열과 구별 할 수 없습니다. 다른 명령과 마찬가지로 ls 는 옵션 끝으로 " - "를 허용 하므로 ls -l -- *.xml작동합니다. grep 오류를 재현 할 수 없지만 ls -l | grep *.xml비슷한 오류가 발생했습니다. 명령은 다음 ls -l | grep '\.xml$'과 같아야합니다 . 명령은 AxmlB 와 같은 이름을 찾습니다 (영숫자가 아닌 작은 따옴표 검색 문자열).
AFH

답변:


2

이후 *.xml글로브는 모두 확장됩니다 .xml현재 디렉토리에있는 파일, 나는 글로브는 다음과 같이 해석 무언가로 확대 될 것으로 가정

ls -l -- .....

또는 이와 유사한 것, 즉로 시작하는 파일 --.

으로 간단한 목록을 작성하여 해당 파일이 무엇인지 확인하십시오 ls -la.

파일 이름을 옵션으로 구문 분석하지 않으려면 rm -- --filename여기에서 파일을 제거 하십시오 --. 또는 GUI에서 또는를 사용하여 제거 할 수 rm "--filename"있습니다.


-2

시도하십시오 ls -l | grep .xml. ls -l * .xml과 같은 것이 처음부터 어떻게 작동하는지 잘 모르겠습니다. 결과를 단일 파일 형식으로 좁히려 고 시도하면 일반적으로 파이핑 및 grep이 도움이 될 것입니다.


고맙지 만 여전히 작동하지 않습니다. 위의 편집 내용을 참조하십시오. 좀 더 파고 있는데 문제가 무엇인지 알 수 있습니다.
Merrick Dennis

1
이것은 약간 부정확하거나 사실이 아닙니다. glob가 현재 디렉토리의 모든 XML 파일로 확장되므로 명령 이 실행 ls -l *.xml되기 때문에 물론 작동 합니다. *.xmlls -l foo.xml bar.xml baz.xml ...
slhck 2016 년

으아 아아아 설명해 주셔서 감사합니다. 특정 파일 / 포맷을 찾을 때 항상 파이프 / grep
ryekayo

1
네, 그럴 필요는 없습니다. 또한 파일 이름을 반복해서 처리하는 등 나중에 파일 이름을 사용하려는 경우 오류가 발생하기 쉽습니다. for f in *.xml; do…대신에 할 수 있습니다for f in $(ls | grep .xml); do…
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.