Cercare un file: locate, find e grep

  • CommentaScrivi un commento
  • ForumDiscuti sul forum
  • PrecedenteInteragire col file system: pwd, ls e cd
  • SuccessivoCreare e/o cancellare file e directory: touch, rm, mkdir e rmdir

In questa lezione vedremo come effettuare delle ricerche per trovare file e/o directory all'interno del nostro file system.
Per fare ciò Linux dispone di diversi comandi, in questa guida vedremo come funzionano e a cosa servono i tre principali.

Il comando locate

Il modo più semplice e veloce per cercare file o directory ci è offerto dal comando locate che effettua ricerche sulla base del nome dei file. Il suo funzionamento è semplicissimo: è sufficiente accompagnare locate al termine che si vuole cercare. Il risultato sarà un elenco di file e directory che contengono nel loro nome e percorso la parola che si è cercato.

locate termine_da_cercare

Se, ad esempio, volessimo cercare nel nostro server tutti i file che hanno nel nome il termine "pippo", useremo:

Continua dopo la pubblicità...
locate pippo

Locate è davvero velocissimo! Il perchè di questa velocità sta nel fatto che in realta il comando in questione non effettua una ricerca real-time tra i file della macchina, ma si limita a spulciare un apposito database contenente informazioni sui files presenti nella macchina in un dato momento. E' pertanto importante tenere aggiornato questo database usando, di volta in vola, l'apposito comando, ovvero updatedb.

Il comando find

Altro comando utile è find che ci consente di ricercare file e directory in base al nome, alla data di creazione o alla sua dimensione.
Il comando find è molto potente... ma attenzione, talvolta è anche piuttosto lento!!!

Vediamo come usare find in diverse situazioni ed esigenze.

Se volessimo cercare in base al nome del file useremo l'opzione -name, in questo modo:

find /directory/dove/cercare/ -name termine_da_cercare

Se ad esempio volessimo cercare in tutta la macchina tutti i file che hanno nel nome il termine "pippo" (come abbiamo fatto con locate), useremo:

find / -name pippo

Se volessimo cercare in base alla data di creazione del file useremo l'opzione -ctime (Last Change Time) seguita dall'età (espressa in giorni) del file da cercare.

find /directory/dove/cercare/ -ctime età_in_giorni

Se ad esempio volessimo cercare nella directory /home/web/miosito/ un file creato o modificato 7 giorni fa useremo:

find /home/web/miosito/ -ctime 7

Oltre a -ctime esistono altre due interessanti opzioni per le ricerche basate sulle date, si tratta di -atime (Last Access Time) e -mtime (Last Modification Time). La prima opzione consente di cercare file in base all'ultima data di accesso, la seconda in base alla data di ultima modifica del file.

La differenza tra -ctime e -mtime sta nel fatto che la prima opzione considera anche i cambiamenti nei metadati (ad esempio utente o gruppo proprietario) mentre il secondo considera solo le modifiche ai contenuti del file.

Se, per finire, volessimo cercare in base alla dimensione useremo l'opzione -size seguita dalla dimensione in Kb. Find restituirà tutti i file di dimensione uguale o superiore.

find /directory/dove/cercare/ -size dimensione_in_Kb

Se ad esempio volessimo cercare nella directory /home/web/miosito/fotografie/ tutti i file con dimensione uguale o maggiore di 100 Kb scriveremo:

find /home/web/miosito/fotografie/ -size 100

Il comando grep

Per finire questa nostra lezione vediamo un ultimo, utilissimo comando: grep.
Con grep possiamo cercare i file che conengono una determinata parola o una determinata stringa di testo. La sintassi è la seguente:

grep pattern file

Poniamo, per fare un esempio, di voler cercare tutti i file .html che contengono la parola "casa":

grep casa *.html

Grazie alla sintassi qui sopra verrà cercata la stringa "casa" tra tutti i file .html (l'asterisco, infatti, sta ad indicare "qualsiasi cosa" - c.d. wildcards - ed è utilizzato, nel nostro esempio, per cercare ogni files con estensione .html).

Da notare che nel nostro esempio abbiamo cercato non la parola "casa", ma la stringa! Ne consegue che nei risultati potremo trovare anche files che contengono, ad esempio, la parola "casale" o "casata".

Se avessimo voluto cercare solo a parola "casa" avremmo dovuto usare l'opzione -w in questo modo:

grep -w "casa" *.html

Le potenzialità di grep sono tantissime, tuttavia rimando ad altra sede la trattazione completa di questo comando il quale può essere compreso a pieno solo dopo aver introdotto le espressioni regolari (argomento che tratteremo in futuri tutorial).

I commenti degli utenti

I commenti sono sottoposti alle linee guida di moderazione e prima di essere visibili devono essere approvati da un moderatore.