logo

Trova comandi in Linux/Unix con esempi

Il comando find ci aiuta a trovare un particolare file all'interno di una directory. Viene utilizzato per trovare l'elenco dei file per le varie condizioni come autorizzazione, proprietà dell'utente, modifica, data/ora, dimensione e altro.

Nei sistemi operativi Unix e in altri sistemi operativi, il comando find è un'utilità della riga di comando che trova i file sulla base di alcuni formati specificati dall'utente e stampa il percorso di tutti gli oggetti corrispondenti o, se sono richieste altre azioni, implementa quell'azione su tutti gli oggetti abbinati.

Inizia una ricerca da una posizione di partenza desiderata e, successivamente, attraversa ricorsivamente le directory (nodi) di una struttura gerarchica (generalmente un albero). Il comando find può cercare e attraversare diversi sistemi di partizione di file appartenenti a uno o più dispositivi di archiviazione nella directory iniziale.

Il formato di ricerca contiene un modello per la corrispondenza con il nome file o l'intervallo di tempo per la corrispondenza con l'ora di modifica o l'ora di accesso al file. Per impostazione predefinita, il comando find fornisce un elenco di tutti i file nella directory di lavoro corrente. Tuttavia, gli utenti possono limitare la ricerca al livello massimo desiderato nella directory iniziale.

I programmi di localizzazione associati applicano un database di file indicizzati ottenuto dal comando fine per fornire una tecnica più rapida per la ricerca per nome nell'intero file system.

L'utilità di ricerca viene fornita per impostazione predefinita con la maggior parte dei file Distribuzioni Linux , quindi non è necessario installare alcun pacchetto aggiuntivo. È uno dei comandi più essenziali e utilizzati del Linux sistema.

 find 

Le due opzioni determinano il modo in cui find deve considerare i collegamenti simbolici. La natura predefinita non è mai quella di perseguire collegamenti simbolici. La bandiera, cioè -L , porterà a perseguire collegamenti simbolici. La bandiera, cioè -H , si limiterà a perseguire collegamenti simbolici continuando con gli argomenti della riga di comando. I flag sono menzionati nello standard POSIX per il comando find. Un'estensione di base è una bandiera, ovvero -P , per disabilitare esplicitamente il collegamento simbolico seguente.

Almeno un percorso deve anticipare l'espressione. Il comando find può interpretare internamente i caratteri jolly e i comandi devono essere racchiusi tra virgolette attentamente per gestire il globbing della shell.

I componenti dell'espressione sono isolati dal limite dell'argomento della riga di comando, generalmente indicato come spazio bianco all'interno della sintassi della shell. Sono considerati dal lato sinistro al lato destro. Possono includere componenti logici come OR e AND nonché predicati (azioni e filtri). GNU find contiene molte altre funzionalità non menzionate da POSIX.

I seguenti simboli vengono utilizzati per specificare la directory:

(.) : Per il nome della directory corrente

(/) : Per la directory principale

Breve storia del comando Trova

Il comando find è presente nella versione 5 di Unix come elemento di Banco di lavoro del programmatore progetto ed è stato specificato da Dick Haight con cpio, che sono stati sviluppati per essere utilizzati insieme.

Originariamente, l'implementazione GNU del comando find era specificata da Eric Decker . Successivamente è stato sviluppato da David MacKenzie, Tim Wood , E Jay Plett . Inoltre, il comando find è stato portato sul sistema operativo IBM i.

nucleo del processo Android

Predicati

Le primarie ampiamente utilizzate sono:

    -modello del nome:Controlla che il nome del file sia lo stesso del modello shell-glob specificato oppure no.-tipo tipo:Verifica che il file sia del tipo fornito.-stampa:Dà sempre il vero valore. Stampa il nome del file corrente e una nuova riga su stdout.-print0:Dà sempre il vero valore. Stampa il nome del file corrente e un carattere null su stdout. Non necessario da POSIX.-exec programma [argomento ...];:Dà sempre il vero valore. Esegue un programma con gli argomenti fissi forniti e il percorso del file corrente.-exec programma [argomento ...] { } +:Dà sempre il vero valore. Esegue un programma con gli argomenti fissi e il maggior numero possibile di percorsi. Per quasi ogni implementazione, altre occorrenze di {} significano copie extra del nome dato (aspetto non richiesto da POSIX).-ok programma [argomento ...];:È uguale a -exec, ma restituirà false o true se il programma restituisce 0.

Trova le impostazioni predefinite per implementare -print nel caso in cui le condizioni siano vere se l'espressione non utilizza -ok, -exec, -print o -print0.

enumerazioni Java

Operatori

Gli operatori migliorano le espressioni del comando find. Sono menzionati in ordine di precedenza decrescente:

    (espr):Questo operatore può forzare la precedenza.! espressione:Se expr restituisce false, restituisce true.
  • expr1 expr2 (o expr1 -a expr2 : AND. expr2 non viene valutato se expr1 è falso.
  • espressione1 -o espressione2 : OR. expr2 non viene valutato se expr1 è vero.

Esempi del comando find

Vediamo i seguenti esempi del comando find:

Trova i file per nome

Possiamo cercare tutti i file che terminano con l'estensione '.txt'. Per fare ciò, esegui il comando seguente:

 find . -name '*.txt' 

Il comando precedente elencherà tutti i file di testo dalla directory di lavoro corrente. Considera l'output seguente:

Trova Linux

Dall'output precedente, tutti i file con estensione '.txt' vengono elencati con il comando trova.

Ricerca di file per tipo

Il parametro '-type' viene utilizzato per specificare il tipo di file.

Alcuni dei tipi di file sono i seguenti:

  • f: file normale
  • d: elenco
  • l: collegamenti simbolici
  • c: dispositivi di carattere
  • b: bloccare i dispositivi

Considera il comando seguente:

 find . -type d -name '*.bak' 

Il comando precedente elencherà tutte le directory con estensione '.bak'. Considera l'output seguente:

Trova Linux

Dall'output precedente, il comando 'find . -type d -name '*.bak' visualizza tutte le directory che terminano con '.bak'.

Trova file più recenti

Il parametro '-newer' aiuta a cercare i file più recenti rispetto al file menzionato. Considera il comando seguente:

 find . -newer msg.txt 

Il comando precedente mostrerà tutti i file più recenti di 'msg.txt' dalla directory di lavoro corrente. Considera l'output seguente:

Trova Linux

Dall'output precedente, tutti i file visualizzati sono più recenti del file 'msg.txt'.

stringa in data

Trova ed elimina un file

L'opzione '-delete' viene utilizzata per eliminare un file specifico. Dobbiamo stare molto attenti mentre usiamo questo comando perché non esiste un'opzione di annullamento se viene eseguito una volta. Considera il comando seguente:

 find . -name Demo.txt -delete 

Il comando precedente eliminerà il file 'Demo.txt' dalla directory di lavoro corrente. Considera l'output seguente:

Trova Linux

Trova una directory

L'opzione 'type -d' viene utilizzata per trovare una directory. Considera il comando seguente:

 find . type -depth -name Newdirectory 

Il comando precedente troverà la posizione 'Nuova directory'. Considera l'output seguente:

Trova Linux

Trova i file in base all'ora di modifica

L'opzione '-mtime', seguita dal numero di giorni, viene utilizzata per trovare i file in base alla modifica. Il numero di giorni può essere positivo o negativo. Il valore negativo verrà utilizzato per meno di come -1 viene utilizzato per l'ultimo giorno e, allo stesso modo, +1 troverà il file per più di un giorno fa. Considera il comando seguente:

 find ./Newdirectory -mtime -1 

Il comando precedente troverà i file modificati nell'ultimo giorno. Considera l'output seguente:

Trova Linux

Trova file per autorizzazione

L'opzione '-perm' viene utilizzata per trovare file in base all'autorizzazione. Esegui il comando find con l'opzione '-perm' e passa il valore richiesto. Considera il comando seguente:

 find ./ -perm 777 

Il comando precedente elencherà i file dalla directory specificata che chiunque potrà leggere, scrivere ed eseguire.

Trova e sostituisci file

Per trovare e sostituire i file, dobbiamo combinare il comando find con il comando sed. Per operare sui file, utilizzare l'opzione '-exec' con il comando find. Considera il comando seguente:

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

dal comando precedente, l'occorrenza specificata verrà sostituita. Considera l'output seguente:

Trova Linux

Trova testo all'interno di più file

Possiamo fare un'altra combinazione del comando find con il comando grep per trovare il testo dai vari file. Considera il comando seguente:

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

Il comando precedente troverà le righe contenenti il ​​testo 'demo' da tutti i file di testo all'interno della directory 'Nuovadirectory'. Considera l'output seguente:

Trova Linux

Dall'output precedente, possiamo vedere le righe in cui è stato visualizzato il testo 'demo'.

Cerca in ogni directory

 $ find / -name file1 -type f -print 

Il comando precedente trova tutte le directory per un file normale il cui titolo è file1 e lo stampa sullo schermo. In genere non è una buona idea cercare i file in questo modo. Può volerci un bel po' di tempo. Quindi, è meglio menzionare la directory. Alcuni sistemi operativi potrebbero montare file system (dinamici) che non sono favorevoli al comando find. Nomi di file più complicati contenenti caratteri univoci della shell potrebbero richiedere di essere chiusi tra virgolette singole.