Articolo originale: How to Search for Files from the Linux Command Line

Cercare dei file è relativamente facile quando stai usando una Interfaccia Grafica Utente (GUI). Ma in alcuni ambienti, come i server che non sono dotati di GUI, devi cercare i file usando la riga di comando.

C'è un comando potente in Linux che ti aiuta nella ricerca di file e cartelle chiamato find. In questo articolo, esamineremo il comando find con alcuni esempi.

Cos'è il comando find in Linux?

Il comando find ti consente di cercare con efficienza file, cartelle, dispositivi a caratteri e dispositivi a blocchi.

Qui sotto la sintassi base per il comando find :

find /percorso/ -type f -name file-da-cercare

Dove:

  • /percorso è il percorso dove ci si aspetta di trovare il file. Questo è il punto di partenza per la ricerca dei file. Il percorso può anche essere / o . che rappresenta rispettivamente la radice e la directory corrente.
  • -type rappresenta il descrittore del file. Può essere uno dei seguenti:
    • f - File normali come i file di testo, le immagini, i file nascosti.
    • d - Directory: vengono prese in considerazione solo le directory.
    • l - Link simbolici: i link simbolici puntano a dei file e sono simili a scorciatoie.
    • c - Dispositivi a carattere: sono file usati per accedere a dispositivi a carattere. I driver comunicano con i dispositivi a carattere inviando e ricevendo singoli caratteri (byte, ottetti). Esempi sono le tastiere, le schede audio e il mouse.
    • bDispositivi a blocco: sono file usati per accedere a dispositivi a blocco. I driver comunicano con i dispositivi a blocco inviando e ricevendo interi blocchi di dati. Esempi sono i dispositivi USB e i CD ROM
  • -name è il nome del file che vuoi cercare

Esempi del comando find

Ora che conosciamo la sintassi del comando find vediamo alcuni esempi.

Come cercare file per nome o per estensione

Supponiamo di dover cercare file che contengono la stringa "style". Useremo questo comando:

find . -type f -name "*style*"

Risultato

image-59

Ora supponiamo di dover cercare file con una particolare estensione, come .html. Modificheremo il comando in questo modo:

find . -type f -name "*.html"

Risultato

image-60

Come cercare file nascosti

I file nascosti sono rappresentati da un puntino che precede il nome del file. Normalmente sono nascosti, ma possono essere elencati con il parametro -a del comando ls, per esempio per elencare file nascosti nella directory corrente digitare ls -a.

Per cercare file nascosti modifichiamo come segue il comando find.

find . -type f -name ".*"

Risultato

image-61
Elenco di file nascosti nella mia directory home

Come cercare file di log e di configurazione

I file di log in genere hanno estensione .log e li possiamo cercare in questo modo:

 find . -type f -name "*.log"

Risultato

image-62

In modo simile, per cercare file di configurazione (che in genere hanno estensione .conf) digitiamo:

 find . -type f -name "*.conf"

Come cercare file per tipo

Possiamo cercare file di dispositivo a carattere passando c al parametro -type:

find / -type c

Analogamente i file di dispositivo a blocco si trovano passando b:

find / -type b

Come cercare directory

Nell'esempio che segue cerchiamo delle cartelle chiamate lib. Nota che usiamo -type d.

find . -type d -name "lib*"

Risultato

image-63

💡 Suggerimento: possiamo identificare le directory cercando il flag d nel risultato del comando ls -l.

image-64

Come cercare per dimensione

Un utilizzo incredibilmente utile del comando find è quello di elencare i file in base a una particolare dimensione.

find / -size +250MB
Questo comando elenca file la cui dimensione supera i 250MB

Altre unità di dimensione sono:

  • G: GigaByte.
  • M: MegaByte.
  • K: KiloByte
  • b : byte.

Sostituisci semplicemente <Tipo Unità> con quella desiderata.

find <directory> -type f -size +N<Tipo Unità>

Come cercare file per data di modifica

find /percorso -name "*.txt" -mtime -10 

  • -mtime +10: significa che vuoi cercare file modificati almeno 1o giorni fa.
  • -mtime -10: significa meno di 10 giorni fa.
  • -mtime 10: se ometti + o – vuol dire esattamente 10 giorni fa.

Di seguito il contenuto della mia directory home:

image-65

Applichiamo l'esempio di ricerca sopra descritto nella mia directory home (ipotizzando che il comando sia stato eseguito il 17 febbraio)

find . -type f -name ".*" -mtime +10
image-66
Ecco i file che sono stati modificati più di 10 giorni fa.

Esempi pratici di find negli script bash

Possiamo combinare find con il comando di eliminazione rm o spostamento mv per creare script bash significativi che possono essere automatizzati.

Diciamo che vogliamo creare uno script che sposta i file di log più vecchi di 7 giorni in una cartella di backup e che nella cartella di backup elimina i file di log che sono più vecchi di 30 giorni. Possiamo creare uno script e pianificarne l'esecuzione con cron. Puoi saperne di più su cron in questo articolo.

Vediamo lo script:

#!/bin/bash
# Script per spostare i file di log più vecchi di 7 
# giorni nel percorso di backup app/backup_logs/ESB0*

# sposta i log ESB01 nella cartella di backup
find /logs/esb01/audit  -name "*.tar.gz" -mtime +7 -exec mv {} app/backup_logs/ESB01/ \;

# Elimina i file di log più vecchi di 30 giorni
# dalla cartella di backup
find /app/backup_logs/ESB01 -name "*.tar.gz" -mtime +30  -exec rm {} \;

Nota che usiamo exec con find. Praticamente, exec esegue il comando fornito (mv e rm nel nostro caso). {} è il segnaposto che contiene l'elenco dei file ottenuti  dalla ricerca sui quali eseguire il comando. Infine passiamo il separatore ;. Visto che non vogliamo che la shell interpreti il punto e virgola lo facciamo precedere dalla sequenza di escape \.

Questo script che condivido è molto utile per archiviare ed eliminare i log.

In questo articolo, abbiamo esaminato in dettaglio il comando find e imparato come cercare i file per nome, tipo, dimensione e data di modifica.

Mi auguro che tu abbia trovato utile questo tutorial.

Dimmi cosa ne pensi su Twitter!

Puoi leggere i miei altri post qui.

Risorse: Immagine del banner da Office illustrations by Storyset e Canva.