Come posso usare individuare solo per una directory


10

Questo trova un gran numero di file che si trovano in varie sottodirectory di "Dropnot"

$ locate Dropnot

Posso trovare solo la posizione della directory con locate? (in quale directory "Dropnot" si trova)

Quindi, se Dropnotè presente /home/me/, questa è l'unica voce che viene restituita.

In tal caso, qual è il modo più semplice / più breve?

Preferibilmente attraverso una bandiera o un simbolo piuttosto che eseguire il piping e il greping per esso, ecc., Ma prenderei qualsiasi cosa come opzione.

Forse una sorta di Dropnot $ per la fine della linea? (ma non ha funzionato).

Risposte:


5

Non esiste alcuna opzione da utilizzare locateper trovare il tipo di file selezionato (come la directory), ma è possibile utilizzare la sintassi della domanda Dropnot$per trovare le righe che terminano Dropnot. Per questo è necessario utilizzare l' -eopzione per individuare per attivare l'espressione regolare POSIX.

In questo caso dovresti usare:

locate -e Dropnot$

È importante quale versione di Locate hai. Nel mio sistema (Gentoo Linux) ho Secure Locate:

$ locate --version
Secure Locate 3.1 - Released March 7, 2006

in cui non esiste alcuna --basenameopzione dalla utherrisposta. Questa opzione è fornita da GNU Locate dal pacchetto findutils:

$ ./locate --version
locate (GNU findutils) 4.4.2

Se vuoi usare regexp con GNU Locate dovresti usare -rinvece switch -e.


1
non è l' -eopzione only print entries for currently existing files?
phuclv,

10

Ho mlocateinstallato. È l'impostazione predefinita distribuita da RedHat, quindi sarà su Fedora, RHEL, CentOS. A partire dalman 1 locate

-b, --basename
       Match  only  the  base  name  against the specified patterns. This 
       is the opposite of --wholename.

Quindi, se lo esegui locate -b '\Dropknot', riporterà solo file o directory con esattamente quella stringa.

Because \ is a globbing character, this disables the implicit replacement 
of NAME by *NAME*.

locate -b /Dropnotha funzionato
Michael Durrant il

4

Con GNU individuare (altre implementazioni di individuazione potrebbero differire):

locate '*/Dropnot'
locate Dropnot | grep '/Dropnot$'

Quando non ci sono caratteri jolly nell'argomento, locatecerca un percorso con il termine di ricerca specificato come sottostringa. Quando l'argomento è un modello di shell contenente uno o più caratteri jolly, locatecerca una corrispondenza completa. Se non si desidera produrre l'output /Dropnotalla fine:

locate -0 '*/Dropnot' | xargs -0 -n1 dirname
locate Dropnot | sed -n 's:/Dropnot$::p'

0

Se sei su RedHat, probabilmente hai installato mlocate non Secure Locate. In quel caso non esiste alcuna opzione -e e devi usare -r o --regexp per cercare usando le espressioni regolari di base.


0

Slackware usa slocatedi default, che ha una ricerca regex con opzione r :

locate -r '/Dropnot$'

cercherà le directory nominate Dropnot.

Ciò cercherebbe, ad esempio, le directory numerate solo Dropnot(Dropnot1, Dropnot2, ecc.):

locate -r '/Dropnot[[:digit:]]\+$'

0

Non so perché nessuno abbia proposto qualcosa del genere:

for i in $(locate MYDIR); do [ -d "$i" ] && echo $i; done

Questo controlla solo se una delle stringhe di individuazione è una directory e la stampa

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.