Come uso i nomi di file che iniziano con un trattino "-" come argomenti di comando?


20

Questa potrebbe essere una domanda semplice, ma come posso usare i file che iniziano con "-" con i programmi da riga di comando?

Ad esempio, sto cercando di utilizzare pdfgrepun file chiamato -2013-01-01.pdfma mi lamento che non ci sono opzioni definite per 2, 0, 1, 3 e così via.

La modifica del nome file in qualcosa che non inizia con "-" lo risolve, ma questa non è un'opzione poiché i file non sono stati creati da me. Voglio semplicemente verificare un cambiamento specifico che so che sta arrivando.


questo dos non funziona, mi dà gli stessi errori di prima
Kristoffer

3
Ad esempio grep -i dfv -- -myfile1 -myfile2,.

che funzioni! Grazie! rispondi e posso contrassegnarlo come accettato per le generazioni future :)
Kristoffer

@AliNa, l'utilizzo delle virgolette ha funzionato appositamente per te con pdfgrep? Non ha funzionato per me. Sto usando Lubuntu.

4
@AliNa: le virgolette non funzioneranno, poiché vengono interpretate dalla shell, non dal programma.
Hammar,

Risposte:


22

Molto spesso --viene utilizzato nella riga di comando per segnalare a un programma che non verranno più utilizzate opzioni di comando disponibili. Ciò è particolarmente utile se un file contiene un trattino, che il programma cercherebbe di interpretare come opzione.

  1. Senza il --, c'è un errore generato:

    $ 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. Con l' --usato abbiamo un comando riuscito:

    $ 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è programmato per comprendere --che i seguenti argomenti della riga di comando non sono opzioni. La maggior parte dei programmi fa lo stesso, ma non tutti i programmi comprendono-- . Per i programmi che non lo fanno, la soluzione è anteporre il nome file con ./, in questo modo:

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

    Questo dovrebbe funzionare con qualsiasi comando, a meno che per qualche motivo il comando non possa accettare un percorso, solo un nome file puro.

Per un'introduzione generale alla riga di comando, consultare questo utile PDF .


4
Purtroppo, --non non funziona con tutti i programmi a linea di comando. Da quel commento avevo assunto l'OP che pdfgrepè uno di quelli che non riconosce --. Ma l'accettazione qui suggerisce il contrario. In ogni caso, un programma deve essere codificato per riconoscerlo --. Molti programmi usano le librerie per analizzare i loro argomenti, che riconoscono --. Ma alcuni non lo fanno, e di quelli, alcuni non sono codificati per riconoscere --.
Eliah Kagan,

3
Per quei programmi che non riconoscono --la solita soluzione alternativa sta mettendo ./davanti al file:pdfgrep ./-2013-01-01.pdf
Carlos Campderrós

2
Sì, mettere ./davanti è la soluzione più portatile e robusta. Funziona su qualsiasi programma, su qualsiasi versione di unix.
hlovdal

16

Si antepone il nome del file con ./(o un altro percorso relativo o assoluto che funziona). In questo modo è portatile.

Esempio:

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

L'uso di --per indicare la fine delle opzioni non è sempre disponibile. Alcuni comandi lo sapranno, altri no. E questo cambierà tra diversi sistemi. Quindi, alla fine, è meno portatile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.