Come trovare un file in FreeBSD


14

Sto cercando di localizzare tutte le copie del example.filenamemio server FreeBSD. Qual è il modo migliore / più semplice / più efficiente per farlo?


1
Mentre le risposte saranno simili, potresti voler chiarire se stai usando Linux o FreeBSD. Non sono la stessa cosa.
Greg Hewgill,

titolo modificato per rendere il sistema operativo più specifico
Ian

Questo dovrebbe probabilmente essere taggato con FreeBSD, ma non ho la reputazione per farlo.
mikl

Risposte:


18
find / -name example.filename

2
Affidabile, ma lento. A volte molto lento.
dmckee --- ex gattino moderatore

3
altri flag "trova" che potrebbero essere appropriati, a seconda delle necessità: -tipo f (non si preoccuperà di directory o collegamenti simbolici con lo stesso nome) -ls (per mostrare dettagli come la dimensione del file, ad esempio se i file hanno lo stesso nome ma contenuti diversi)
Zac Thompson

19
locate filename

Molto più veloce di find, se stai eseguendo il servizio di individuazione, e trova solo i file che esistevano updatedball'ultima esecuzione (di solito la notte prima del controllo di un lavoro cron).

È possibile eseguire updatedba mano, ma che è anche più lento rispetto alla findCletus suggerisce , e richiede root. A volte aggiorno il database a mano dopo aver installato un sacco di nuove cose.


3
Locate funziona solo se hai il servizio in esecuzione per creare il local individuare db (dimentica come si chiama). Può anche subire un ritardo (nel senso che il file che stai cercando potrebbe essere stato aggiunto dall'ultima build).
cletus,

Modifiche e commenti incrociati sul filo. Freddo. Naturalmente hai ragione su entrambi i fronti.
dmckee --- ex gattino moderatore

4
Se ti ritrovi a fare find /o su un grande albero più di una volta alla settimana, locateprobabilmente vale la pena eseguire il servizio, perché locate(1)è molto più veloce.
Drew Stephens,

@cletus Running sudo periodic weeklyaggiorna il locatedatabase. Eseguilo dopo ogni installazione o download che può contenere i file che desideri.
Basil Bourque,

2

Se hai installato Locate (aka Slocate), allora

locate example.filename

individuare esegue un processo cron ogni notte che reindicizza tutti i file sul computer. Non è sempre aggiornato per questo motivo.


2

A volte vuoi trovare file a un livello di directory specifico. In questo caso può essere conveniente usare i caratteri jolly della shell:

ls /data/*/example.filename

Ovviamente questo funziona solo se si dispone di una struttura di directory rigida.


1

locate

Come altri hanno già detto, locateè il modo rapido per trovare un file. Questo comando utilizza un indice precompilato dei nomi di file e cartelle. Questo database di nomi viene cercato, anziché eseguire la scansione del file system.

locate example.filename 

Per non distinguere tra maiuscole e minuscole, aggiungi -i.

locate -i eXAmPle.FileName

locateDatabase di aggiornamento

Il database utilizzato da locatedeve essere aggiornato. Dopo aver eseguito un'installazione o un download che potrebbe contenere il file desiderato, è necessario aggiornare il locatedatabase.

Il locatedatabase verrà eventualmente aggiornato automaticamente dal tuo sistema FreeBSD. C'è una serie settimanale di faccende che include questa attività. Queste faccende sono elencate nello /etc/periodic/weekly/310.locatescript.

Il modo più semplice e sicuro per forzare l'aggiornamento anticipato del locatedatabase è forzare subito il set settimanale di faccende.

sudo periodic weekly

Oppure potresti anche forzare tutte le normali faccende da svolgere. Potresti volerlo fare subito dopo aver configurato un nuovo sistema FreeBSD.

sudo periodic daily weekly monthly

Se usi altre strade per aggiornare il locatedatabase, potresti ricevere un messaggio sulla sicurezza, rivelando i nomi di tutti i file del tuo sistema a qualsiasi utente sul sistema FreeBSD. L'uso del periodicpercorso evita questo problema.


0

Se il database di individuazione è aggiornato, allora basta:

locate example.filename

0

A volte lo faccio


  find . | grep example.filename

probabilmente enormemente inefficiente comunque.


Sì, che corrisponde a tutto quindi butta via tutto tranne quello che stavi cercando. Invece puoi semplicemente fare 'find -name "example.filename"' che fa esattamente le stesse cose senza prima stampare tutto e senza eseguire un ulteriore processo grep.
Mihai Limbăşan,
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.