Come cercare un file in linux. Due comandi : find e locate
Cercare un file in linux.
Cercare un file in linux con find
Una delle prime domande che pone un nuovo utilizzatore del pinguino è quella della di come si cerca un file in linux.
Uno dei modi per cercare e un file in linux da shell è quello di utilizzare il comando find . Con find si cercano anche le directory.
Iniziamo:
find -name “file_Da_cercare”
Con questa struttura noi ricercheremo nella directory corrente un file che si chiama esattamente file_Da_cercare con il controllo maiuscole/minuscole. Quindi se dovesse esistere nella directory un file file_da_cercare , non verrebbe proposto come trovato.
Volendo fare una ricerca non case-sensitive dobbiamo utilizzare il paramentro -iname
find -iname “file_da_cercare”
Io di solito lancio il comando con sudo ….
Nell’immagine abbiamo visto una ricerca effettuata su Ubuntu nella directory Scrivania con l’utilizzo dei parametri -iname o -name
Adesso creiamo sulla Scrivania i file pippo ,Pippo , Pluto , plUto e Paperino e vediamo come ricercare un file imponendo come come parametri di ricerca parte del nome file e che la ricerca deve essere svolta nella directory corrente.
Cerchiamo tutti i file che contengono nel nome la sequenza esatta “lU” e poi la stessa sequenza senza controllo case-sensitive
sudo find -name “*lU*”
sudo find -iname “*lU*”
Per fare questa ricerca è stato utilizzato il carattere speciale * .
Tale carattere può essere utilizzato in questo modo : “*ippo” “*pip*” “pi*”
“*ippo” = Trova i file che loro nomi finiscono per ippo
“*pip*” = Trova i file che hanno i nomi che contengono la stringa pip
“pi*” = restituisce lista dei file che hanno il nome che inizia con pi
Per poter ricercare file nell’intera unità corrente utilizzeremo il parametro ” / ” che impone al comando la ricerca dalla radice.
find / -name “file_Da_cercare”
Altri parametri
-size
Ora che conosciamo la logica con cui lavora find passiamo ad altri suoi parametri utilizzabili.
find / -size +10M -iname “file_Da_cercare”
Con questo comando andremo a ricercare file che abbiano una grandezza >= a 10MB (maggiore o uguale)
find / -size -10M -iname “file_Da_cercare”
Con questo comando andremo a ricercare file che abbiano una grandezza <= a 10MB (minore o uguale)
Possiamo utilizzare come unità di misura anche :
c = byte
k= kilobyte
M= megabyte
G = gigabyte
-perm
find / -perm 777 -name “*stringa*”
con -perm ricercheremo tutti i file o cartelle che hanno l’attributo 777
Directory o file ?
A proposito, stavo dimenticando la differenza fra file e directory o cartelle. In ambiente Microsoft in una cartella possono coesistere una cartella di nome pippo e un file di nome pippo . In ambiente linux No.
il parametro da utilizzare se vogliamo distinguere una ricerca su file o directory è -type
quindi
-type d = ricerca solo le directory
-type f = ricerca solo i file
pertanto , non utilizzando il parametro -type verrà effettuata la ricerca in maniera non condizionata.
Cercare un file in linux con locate.
Il comando di localizzazione viene utilizzato per trovare i file in base al loro nome di file. Il comando di localizzazione è velocissimo perché c’è un processo in background che gira sul sistema che trova continuamente nuovi file e li memorizza in un database. Quando si usa il comando locate, cerca il nome del file in quel database invece di cercare il proprio filesystem mentre si aspetta (che è quello che fa il comando find).
Usare il comando è facile; basta digitare “locate” seguito dal nome del file che si sta cercando, in questo modo:
locate fatttura.txt
Qualora il db non fosse aggiornato, si può spingere ad aggiornarsi con questo semplice comando
sudo updatedb
Se un file viene rimosso dal sistema, fino a quando non si aggiorna di nuovo il database di localizzazione, il comando continuerà a mostrare quel nome del file in uscita. In questo caso si può saltare l’aggiornamento del database, e avere comunque risultati corretti in output usando l’opzione -e della riga di comando.
locate -e fattura.txt
Case sensitive
Per impostazione predefinita, l’operazione di ricerca che il comando di localizzazione esegue è sensibile alle maiuscole e minuscole. Ma è possibile forzare lo strumento ad ignorare le distinzioni di caso utilizzando l’opzione della riga di comando -i.
Per esempio, ho due file sul mio sistema, chiamati ‘elencofatture.txt’ e ‘ElencoFatture.txt’. Quindi, come potete vedere, i nomi dei file sono gli stessi, solo che i loro casi sono diversi.
Se chiedete di localizzare con locate “*fatture*”, allora mostrerà solo il nome minuscolo nel suo output:
elencofatture.txt
mentre se utilizziamo locate -i *fatture*
darà come risultato
sia elencofatture.txt che ElencoFatture.txt