Utilizzando individuare per trovare una directory


20

Uso sempre individuare per trovare file di cui conosco il nome, individuare è molto veloce e lo adoro. Per i file creati di recente, trovare è fantastico, normalmente con i file creati di recente so dove praticamente sono stati creati, quindi non devo cercare nel mio intero file system.

Quando ho dimenticato la posizione di una directory, tuttavia, né trovare né individuare sembrano ideali.

Individua genera sempre troppe informazioni perché ogni file all'interno di una directory è anche una corrispondenza per individuare. Ad esempio, se stavo cercando una directory denominata log da qualche parte sul mio file system, il log di localizzazione restituirebbe tonnellate e tonnellate di risultati. Se faccio la stessa cosa con find, find / -name log -type d find richiede minuti per essere eseguito e sputa ogni sorta di errore di autorizzazione ogni volta che incontra una cartella che non riesce a leggere.

C'è un modo migliore?

Risposta: Quindi rimango con grep finché non trovo qualcos'altro:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

Risposte:


12

Un modo (sospetto che ci possa essere un modo migliore) è usare grep per restituire solo quei percorsi che finiscono nel nome della tua cartella:

locate foldername | grep /foldername$

28

È possibile utilizzare l'opzione --regex( -r) di locate:

locate -r '/log$'

Sì (+1). locateha la sua capacità regex integrata: -ro --regex... per la gamma completa di opzioni, vedi: info individuare
Peter.O

1
Sapevo che doveva esserci un modo migliore!
misterben,

Così corto e funziona senza intoppi. Ottimo contributo! Un altro motivo per imparare / padroneggiare le espressioni regolari
loved.by.Jesus

Non hai bisogno dei due 'in questo caso: locate -r /log$è abbastanza.
simlev,

5

Hai provato:

locate /home/insertusernamehere/*/filename?

o

locate file | grep -i '^/home/.*/examplesubdirectory'?

o qualsiasi variazione di tale?


Questa risposta mostra che grepnon è necessario, e come si vede nella prima opzione suggerita, né lo sono né regexps.
Tom,

2

Ecco qui

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

1
Se puoi spiegare quali cambiamenti hai apportato, sarà utile anche per altri.
Ron,
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.