コマンド引数としてダッシュ「-」で始まるファイル名を使用するにはどうすればよいですか?


20

これは簡単な質問かもしれませんが、コマンドラインプログラムで「-」で始まるファイルを使用するにはどうすればよいですか。

たとえば、pdfgrepという名前のファイルで使用しようとしています-2013-01-01.pdfが、2、0、1、3などに対して定義されたオプションがないと文句を言います。

ファイル名を「-」で始まらない名前に変更すると解決しますが、ファイルは私が作成したものではないため、これはオプションではありません。私は、来ているとわかっている特定の変更を確認したいだけです。


これは機能しません。以前と同じエラーが表示されます
クリストファー

3
一例として、grep -i dfv -- -myfile1 -myfile2

うまくいく!ありがとう!それをn個の答えにし、私はそれを将来の世代に受け入れられたとマークすることができます:)
クリストファー

@AliNa、引用符を使用すると、pdfgrepで特に機能しましたか?私にはうまくいきませんでした。Lubuntuを使用しています。

4
@AliNa:引用符は、プログラムではなくシェルによって解釈されるため、機能しません。
ハンマー

回答:


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
残念ながら、--ないではないと動作し、すべてのコマンドラインプログラム。私はそのコメントからOPpdfgrep認識しないそれらの1つであると仮定しまし--。ただし、ここでの受け入れは、そうでないことを示唆しています。いずれにせよ、プログラムはを認識するようにコーディングする必要があります--。多くのプログラムは、ライブラリを使用して引数を解析しますが、引数は認識され--ます。しかし、そうでないものもありますし、そのうちのいくつかは認識できるようにコーディングされていません--
エリアケイガン

3
認識されないそれらのプログラムでは--通常の回避策を置くことで./、ファイルの前に:pdfgrep ./-2013-01-01.pdf
カルロスCampderrós

2
はい、./前面に置くことが最もポータブルで堅牢なソリューションです。任意のプログラム、任意のUNIXバージョンで動作します。
hlovdal

16

ファイル名の前に ./(または機能する別の相対パスまたは絶対パス)を追加します。このように、ポータブルです。

例:

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

使用--オプションの終わりを示すためには、常に利用可能ではありません。一部のコマンドはそれを認識しますが、一部は認識しません。そして、これは異なるシステム間で変わります。そのため、最終的には移植性が低下します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.