trova la directory di esclusione


13

Sono su Linux (Ubuntu) e vorrei escludere determinate directory (come .hg) quando sto facendo un

find | less  

Ho provato quanto segue per escludere la directory .hg dall'elenco, ma non sembra funzionare.

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

Come escludo .directoryin un comando find

Risposte:


14

Sulla ricerca di una findsoluzione simile ho scoperto l'utile spiegazione su Come usare l'opzione '-prune' di 'find' in sh? di Laurence Gonsalves .

Puoi usare qualcosa come:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

o (senza il nome)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)

Le parentesi (sfuggite) \(e \)raggruppano i test ( typee name) e le azioni corrispondenti ( prunee print, rispettivamente) insieme a sinistra e a destra dell'OR ( -o).

Poiché -oha una precedenza inferiore rispetto alla giustapposizione, è possibile omettere le parentesi se lo si desidera. Molte findimplementazioni ti consentono anche di saltare la finale -print.

find . -type d -name .hg -prune -o -type f -name "foo" -print

1
Stavo per scrivere la mia soluzione, ma sembra essere esattamente questo. Personalmente metterei l' -pruneinterno del primo set di parentesi e l' -type f -printuno in un secondo set, solo per rendere le operazioni e / o più ovvie, ma per il resto questo mi sembra perfetto.
me_e

Ho migliorato le parentesi (e il loro ragionamento) grazie al commento di @me_and.
fheub

2

Dai un'occhiata a ack: http://betterthangrep.com/

Oltre ad avere una serie ragionevole di cartelle escluse predefinite (ad esempio .hg è un'esclusione predefinita), è facile escludere nuove cartelle:

ack --ignore-dir=.directory search_term

Per riportarlo nel tuo caso d'uso in cui stai cercando un elenco di file, utilizzare l' -fopzione, come in:

ack -f --ignore-dir=.directory

Sono passato dalla scrittura di comandi di ricerca / ricerca contorti a quelli ack semplici.

Suggerimento: inserire le opzioni della riga di comando comunemente utilizzate (ad esempio le cartelle escluse) in un file .ackrc.


Sulla base della find | lessdomanda, l'OP sta cercando un semplice elenco di file. In che modo aiuta?
un CVn

@ MichaelKjörling Come ho affermato nella mia risposta, l'opzione -f fornisce un elenco di file.
Brian Leathem,

-2

Puoi provare

find \( ! -regex '.*/\.directory\(\|/.*\)' \)

Abbastanza dannatamente sicuro che questo non fa nulla di simile a ciò che l'OP ha chiesto.
me_e

Ho solo pensato che questo è ciò che egli intende per.directory
yuyichao
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.