Foto per gentile concessione di Qole Pejorian
Oltre all'operazione di base di ricerca di file in una struttura di directory, puoi anche eseguire diverse operazioni pratiche utilizzando il comando trova che renderà facile il tuo viaggio dalla riga di comando.
In questo articolo, esaminiamo 15 esempi pratici di comando trova Linux che saranno molto utili sia per i principianti che per gli esperti.
Per prima cosa, crea i seguenti file vuoti di esempio nella tua home directory per provare alcuni degli esempi di comando find menzionati di seguito.
# vim create_sample_files.sh touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c mkdir backup cd backup touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c # chmod +x create_sample_files.sh # ./create_sample_files.sh # ls -R .: backup MybashProgram.sh MyCProgram.c create_sample_files.sh mycprogram.c Program.c ./backup: MybashProgram.sh mycprogram.c MyCProgram.c Program.c
1. Trova i file usando il nome
Questo è un utilizzo di base del comando trova. Questo esempio trova tutti i file con nome — MyCProgram.c nella directory corrente e tutte le sue sottodirectory.
# find -name "MyCProgram.c" ./backup/MyCProgram.c ./MyCProgram.c
2. Trova i file usando il nome e ignorando maiuscole e minuscole
Questo è un utilizzo di base del comando trova. Questo esempio trova tutti i file con nome — MyCProgram.c (ignorando il caso) nella directory corrente e in tutte le sue sottodirectory.
# find -iname "MyCProgram.c" ./mycprogram.c ./backup/mycprogram.c ./backup/MyCProgram.c ./MyCProgram.c
3. Limita la ricerca a un livello di directory specifico utilizzando mindepth e maxdepth
Trova il file passwd in tutte le sottodirectory a partire dalla directory principale.
# find / -name passwd ./usr/share/doc/nss_ldap-253/pam.d/passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
Trova il file passwd sotto root e un livello sotto. (vale a dire root — livello 1 e una sottodirectory — livello 2)
# find -maxdepth 2 -name passwd ./etc/passwd
Trova il file passwd sotto root e due livelli sotto. (vale a dire root — livello 1 e due sottodirectory — livello 2 e 3)
# find / -maxdepth 3 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
Trova il file della password tra le sottodirectory di livello 2 e 4.
# find -mindepth 3 -maxdepth 5 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd
4. Esecuzione di comandi sui file trovati dal comando Trova.
Nell'esempio seguente, il comando find calcola la somma md5 di tutti i file con il nome MyCProgram.c (ignorando maiuscole e minuscole). {} viene sostituito dal nome del file corrente.
# find -iname "MyCProgram.c" -exec md5sum {} \; d41d8cd98f00b204e9800998ecf8427e ./mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.c d41d8cd98f00b204e9800998ecf8427e ./MyCProgram.c
5. Invertire la partita.
Mostra i file o le directory il cui nome non è MyCProgram.c .Dato che maxdepth è 1, apparirà solo nella directory corrente.
# find -maxdepth 1 -not -iname "MyCProgram.c" . ./MybashProgram.sh ./create_sample_files.sh ./backup ./Program.c
6. Trovare i file in base al suo numero di inode.
Ogni file ha un numero di inode univoco, grazie al quale possiamo identificare quel file. Crea due file con nome simile. cioè un file con uno spazio alla fine.
# touch "test-file-name" # touch "test-file-name " [Note: There is a space at the end] # ls -1 test* test-file-name test-file-name
Dall'output di ls, non è possibile identificare quale file ha lo spazio alla fine. Usando l'opzione -i, puoi visualizzare il numero di inode del file, che sarà diverso per questi due file.
# ls -i1 test* 16187429 test-file-name 16187430 test-file-name
Puoi specificare il numero di inode su un comando di ricerca come mostrato di seguito. In questo esempio, il comando find rinomina un file utilizzando il numero di inode.
# find -inum 16187430 -exec mv {} new-test-file-name \; # ls -i1 *test* 16187430 new-test-file-name 16187429 test-file-name
Puoi usare questa tecnica quando vuoi fare qualche operazione con i file che sono nominati male come mostrato nell'esempio sotto. Ad esempio, il file con nome — file?.txt contiene un carattere speciale. Se si tenta di eseguire "rm file?.txt", tutti e tre i file seguenti verranno rimossi. Quindi, segui i passaggi seguenti per eliminare solo il file "file?.txt".
# ls file1.txt file2.txt file?.txt
Trova i numeri di inode di ogni file.
# ls -i1 804178 file1.txt 804179 file2.txt 804180 file?.txt
Utilizza il numero di inode per rimuovere il file che conteneva un carattere speciale come mostrato di seguito.
# find -inum 804180 -exec rm {} \; # ls file1.txt file2.txt [Note: The file with name "file?.txt" is now removed]
7. Trova il file in base alle autorizzazioni del file
Sono possibili le seguenti operazioni.
- Trova i file che corrispondono esattamente all'autorizzazione
- Verifica se l'autorizzazione fornita corrisponde, indipendentemente da altri bit di autorizzazione
- Cerca dando una rappresentazione ottale/simbolica
Per questo esempio, supponiamo che la directory contenga i seguenti file. Tieni presente che i permessi dei file su questi file sono diversi.
# ls -l total 0 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read ---------- 1 root root 0 2009-02-19 20:31 no_for_all -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
Trova i file che hanno l'autorizzazione di lettura per raggruppare. Usa il comando seguente per trovare tutti i file leggibili da tutto il mondo nella tua home directory, indipendentemente dalle altre autorizzazioni per quel file.
# find . -perm -g=r -type f -exec ls -l {} \; -rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read -rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read
Trova i file che hanno l'autorizzazione di lettura solo per il gruppo.
# find . -perm g=r -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
Trova i file che hanno l'autorizzazione di lettura solo per raggruppare [ ricerca per ottale ]
# find . -perm 040 -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
8. Trova tutti i file vuoti (file a zero byte) nella tua home directory e nella sua sottodirectory
La maggior parte dei file dell'output del comando seguente saranno file di blocco e segnaposto creati da altre applicazioni.
# find ~ -empty
Elenca tutti i file vuoti solo nella tua home directory.
# find . -maxdepth 1 -empty
Elenca solo i file vuoti non nascosti solo nella directory corrente.
# find . -maxdepth 1 -empty -not -name ".*"
9. Trovare i 5 migliori file di grandi dimensioni
Il comando seguente visualizzerà i primi 5 file più grandi nella directory corrente e nella sua sottodirectory. L'esecuzione dell'operazione potrebbe richiedere del tempo a seconda del numero totale di file che il comando deve elaborare.
# find . -type f -exec ls -s {} \; | sort -n -r | head -5
10. Trovare i primi 5 piccoli file
La tecnica è la stessa di trovare i file più grandi, ma l'unica differenza è l'ordine crescente.
# find . -type f -exec ls -s {} \; | sort -n | head -5
Nel comando precedente, molto probabilmente vedrai solo i file ZERO byte (file vuoti). Quindi, puoi usare il seguente comando per elencare i file più piccoli diversi dai file ZERO byte.
# find . -not -empty -type f -exec ls -s {} \; | sort -n | head -5
11. Trova file in base al tipo di file usando l'opzione -type
Trova solo i file socket.
# find . -type s
Trova tutte le directory
# find . -type d
Trova solo i file normali
# find . -type f
Trova tutti i file nascosti
# find . -type f -name ".*"
Trova tutte le directory nascoste
# find -type d -name ".*"
12. Trova i file confrontandoli con l'ora di modifica di un altro file.
Mostra i file che vengono modificati dopo il file specificato. Il seguente comando trova mostra tutti i file creati/modificati dopo file_ordinario.
# ls -lrt total 0 -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all ---------- 1 root root 0 2009-02-19 20:31 no_for_all # find -newer ordinary_file . ./everybody_read ./all_for_all ./no_for_all
13. Trova i file per dimensione
Usando l'opzione -size puoi trovare i file per dimensione.
Trova file più grandi della dimensione indicata
# find ~ -size +100M
Trova file più piccoli della dimensione indicata
# find ~ -size -100M
Trova i file che corrispondono alla dimensione specificata
# find ~ -size 100M
Nota:– significa meno della dimensione indicata, + significa più della dimensione indicata e nessun simbolo indica la dimensione esatta data.
14. Crea alias per le operazioni di ricerca frequenti
Se trovi qualcosa di abbastanza utile, puoi farlo come alias. Ed eseguilo quando vuoi.
Rimuovi frequentemente i file denominati a.out.
# alias rmao="find . -iname a.out -exec rm {} \;" # rmao
Rimuovi i file core generati dal programma c.
# alias rmc="find . -iname core -exec rm {} \;" # rmc
15. Rimuovi i file di archivio di grandi dimensioni utilizzando il comando trova
Il comando seguente rimuove i file *.zip che superano i 100 milioni.
# find / -type f -name *.zip -size +100M -exec rm -i {} \;"
Rimuovere tutti i file *.tar che superano i 100 M utilizzando l'alias rm100m (Rimuovi 100 M). Usa concetti simili e crea alias come rm1g, rm2g, rm5g per rimuovere file di dimensioni maggiori rispettivamente di 1G, 2G e 5G.
# alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;" # alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;" # alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;" # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;" # rm100m # rm1g # rm2g # rm5g
Trova esempi di comandi seconda parte
Se ti è piaciuto questo articolo di mamma sul comando trova, non dimenticare di dare un'occhiata all'articolo di papà del comando trova - Papà, l'ho trovato!, 15 fantastici esempi di comandi Trova Linux (parte 2)
Fantastici articoli su Linux
Di seguito sono riportati alcuni fantastici 15 esempi articoli che potresti trovare utili.
- 15 esempi per padroneggiare la cronologia della riga di comando di Linux
- Comando Unix LS:15 esempi pratici
- Fai una presa sul Grep! – 15 Esempi pratici di comandi Grep
- Linux Crontab:15 fantastici esempi di Cron Job