명령 인수로 대시“-”로 시작하는 파일 이름을 어떻게 사용합니까?


20

이것은 간단한 질문이지만 명령 줄 프로그램에서 "-"로 시작하는 파일을 어떻게 사용합니까?

예를 들어, pdfgrep이름이 지정된 파일 에서 사용하려고하는데 -2013-01-01.pdf2, 0, 1, 3 등에 대해 정의 된 옵션이 없다고 불평합니다.

파일 이름을 "-"로 시작하지 않는 파일 이름으로 변경하면 파일 이름이 해결되지만 파일을 직접 만들지 않으므로 옵션이 아닙니다. 내가 알고있는 특정 변경 사항을 확인하고 싶습니다.


이 작동하지 않습니다, 나에게 이전과 같은 오류를 제공
Kristoffer

3
예를 들어 grep -i dfv -- -myfile1 -myfile2.

작동합니다! 감사! 그것은 n이 대답하고 난 : 미래 세대를 허용으로 표시 할 수 있습니다
크리스토퍼

@AliNa, pdfgrep에서 따옴표를 사용하면 효과가 있었습니까? 그것은 나를 위해 작동하지 않았다. 루 분투를 사용하고 있습니다.

4
@AliNa ​​: 인용 부호는 프로그램이 아니라 셸에서 해석되므로 작동하지 않습니다.
hammar

답변:


22

--사용 가능한 명령 스위치가 더 이상 사용되지 않음을 프로그램에 알리기 위해 명령 줄에서 매우 자주 사용됩니다. 이 옵션은 파일에 대시가 포함 된 경우 프로그램에서 옵션으로 해석하려고 할 때 특히 유용합니다.

  1. 이 없으면 --오류가 생성됩니다.

    $ pdfgrep -i posix -find.pdf -xorg.pdf
    
    pdfgrep: invalid option -- 'f'
    pdfgrep: invalid option -- 'd'
    pdfgrep: invalid option -- '.'
    pdfgrep: invalid option -- 'p'
    pdfgrep: invalid option -- 'd'
    pdfgrep: invalid option -- 'f'
    
  2. 사용하면 --성공적인 명령이 있습니다.

    $ pdfgrep -i posix -- -find.pdf -xorg.pdf
    
    -find.pdf: on the command line. Currently-implemented types are emacs (this is the default), posix-awk,
    -find.pdf: posix-basic, posix-egrep and posix-extended.
    -find.pdf: posix-basic, posix-egrep and posix-extended.
    -find.pdf: posix-basic, posix-egrep and posix-extended.
    
  3. pdfgrep--다음 명령 줄 인수가 옵션이 아님 을 이해 하도록 프로그래밍되었습니다 . 대부분의 프로그램은 동일하지만 모든 프로그램이 이해하는-- 것은 아닙니다 . 그렇지 않은 프로그램의 경우 해결책은 ./다음과 같이 파일 이름 앞에을 추가하는 것입니다.

     pdfgrep -i posix ./-find.pdf ./-xorg.pdf
    

    어떤 이유로 명령이 경로를 허용 할 수없고 순수한 파일 이름 만 허용하지 않는 한 모든 명령에서 작동합니다.

명령 행에 대한 일반적인 소개는 이 유용한 PDF를 참조하십시오 .


4
불행히도 모든 명령 행 프로그램에서 작동 --하지는 않습니다 . 나는 그 의견에서 OP 를 인식하지 못하는 OP 중 하나 라고 가정했습니다 . 그러나 여기에 동의하면 다른 제안이 있습니다. 어쨌든 프로그램을 인식하도록 코딩해야합니다 . 많은 프로그램은 라이브러리를 사용하여 인수를 구문 분석합니다 . 그러나 일부는 인식하지 못하고 일부는 인식하도록 코딩되지 않았습니다 . pdfgrep--------
Eliah Kagan

3
--일반적인 해결 방법을 인식하지 못하는 프로그램 ./의 경우 파일 앞에 pdfgrep ./-2013-01-01.pdf
놓입니다

2
예, ./앞에 놓는 것이 가장 휴대 성이 뛰어나고 강력한 솔루션입니다. 모든 프로그램, 모든 유닉스 버전에서 작동합니다.
hlovdal

16

파일 이름 앞에 ./(또는 다른 상대 또는 절대 경로)를 추가하십시오. 이런 식으로 휴대가 편리합니다.

예:

for zefile in ./*.tmp
do
   rm -f "$zefile"
done

의 사용 --옵션의 끝을 나타 내기 위해 항상 사용할 수 없습니다. 어떤 명령은 그것을 알고 일부는 알지 못합니다. 그리고 이것은 다른 시스템에 따라 변할 것입니다. 결국 휴대 성이 떨어집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.