2010-05-09 12 views
40

mia struttura di cartelle si presenta così:ack: Escludendo una sola directory, ma mantenendo tutti gli altri con lo stesso nome

/app 
/app/data 
... 
/app/secondary 
/app/secondary/data 

voglio cercare in modo ricorsivo /app, tra cui /app/data. Non voglio cercare /app/secondary/data tuttavia. Questo quello che ho finora:

ack --ignore-dir=data searchtext 
ack --ignore-dir=secondary/data searchtext 

Il primo comando ignora entrambe le directory e la seconda sta ignorando nessuno dei due. Dalla cartella dell'app, come dovrebbe essere il mio comando ack?

risposta

22

Questa risposta è per le versioni di Ack precedenti a 2, vedere This answer for versions of Ack >=2.

Il primo sta ignorando entrambi perché entrambi hanno "dati" come sottodirectory e ack cerca sub-dir per impostazione predefinita. Quindi ignorerà qualsiasi sub-dir con quel nome. Sfortunatamente, anche il tuo secondo modo non funziona. Questo funziona per me:

ack -a searchtext -G '^(?!.*secondary/data.*).*$' 

Invece di -a per cercare tutti i file, vedere ACK-grep help = tipi di cercare solo determinati tipi di file, ad esempio --type = testo

+0

Grazie per la risposta. Sto ottenendo questo: $ ACK-grep --text -G ACK-grep '^ (*/dati secondari *?!..) * $.': Nessuna espressione regolare trovata. – mattalxndr

+0

è perché hai dimenticato di dargli lo schema che stai cercando, ovvero 'searchtext' – rkulla

+0

Per informazioni su come mettere questa opzione -G in un file '~/.ackrc', vedi: http://stackoverflow.com/domande/5425363/è-da-possibile-to-add-ag-opzione-a-ackrc –

47

Il più vecchio le versioni di Ack possono solo prendere il nome della cartella, non il percorso della cartella. A partire dalla versione 1.93_02, hanno aggiunto questa capacità in:

1.93_02  Wed Oct 6 21:39:58 CDT 2010 
    [ENHANCEMENTS] 
    The --ignore-dir option now can ignore entire paths relative 
    to your current directory. Thanks to Nick Hooey. For example: 

     ack --ignore-dir=t/subsystem/test-data 

(da betterthangrep.com/Changes)

È possibile verificare quale versione avete con --version:

ack --version 
+0

Non funziona in Ack 2.0 https://github.com/petdance/ack2/issues/291 – geekQ

Problemi correlati