Linux trova i nomi dei file con la stringa data


107

Sono su Ubuntu e vorrei trovare tutti i file nella directory corrente e nelle sottodirectory il cui nome contiene la stringa "John". So che greppuò corrispondere al contenuto dei file, ma non ho idea di come usarlo con i nomi dei file. Qualsiasi aiuto sarebbe apprezzato.


Risposte:


195

Usa il comando Trova ,

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

1
La creazione di uno script bash personalizzato con #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi ti consentirebbe di eseguire semplicemente F search-stringcome scorciatoia perfetta
Ilia Rostovtsev

@IliaRostovtsev - carino, ma [ -z "$1" ]sarebbe un po 'meglio.
Joe

@ Joe Ah, giusto. Intendi nel caso in cui un percorso abbia spazi? Ma qui controlliamo solo l'esistenza di $ 1 spazio per far apparire $ 2 e basta. Vuoi dire che è teoricamente migliore, giusto?
Ilia Rostovtsev

@IliaRostovtsev - In realtà, mi sbagliavo. Se $ 1 è nullo, il test diventa if [ -z ]. Ho pensato che sarebbe stato un errore di sintassi, ma funziona. D'ora in poi posso semplificare parte del mio codice.
Joe

25

È già stata fornita una risposta corretta, ma per farti imparare ad aiutare te stesso ho pensato di inserire qualcosa di utile in un modo diverso; se riesci a riassumere ciò che stai cercando di ottenere in una parola, c'è una potente funzionalità di aiuto su Linux.

man -k <your search term>

Quello che fa è elencare tutti i comandi che hanno il tuo termine di ricerca nella breve descrizione. Di solito c'è una buona possibilità che troverai quello che stai cercando . ;)

Quell'output a volte può essere in qualche modo travolgente e consiglierei di restringerlo agli eseguibili, piuttosto che a tutte le pagine man disponibili, in questo modo:

man -k find | egrep '\(1\)'

oppure, se vuoi anche cercare comandi che richiedono livelli di privilegio più elevati, come questo:

man -k find | egrep '\([18]\)'

3
Sono curioso ... una domanda che non mostra alcun tentativo di risolvere il problema in questione tramite una ricerca ottiene un voto positivo, una spiegazione amichevole su come scoprire possibili comandi viene calpestata. Quali sono i criteri? :)
tink

1
ti ho votato. la lezione è che pochi possono maneggiarla. ma possiamo vedere campioni e adattarci :)
tgkprog

2

Il findcomando richiederà molto tempo perché esegue la scansione dei file reali nel file system.

Il modo più veloce è usare il locatecomando, che darà immediatamente il risultato:

locate "John"

Se il comando non viene trovato, è necessario installare il mlocatepacchetto ed eseguire updatedbprima il comando per preparare il database di ricerca per la prima volta.

Maggiori dettagli qui: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab



1

Questa è una soluzione molto semplice utilizzando il treecomando nella directory che desideri cercare. -fmostra il percorso completo del file e |viene utilizzato per reindirizzare l'output di tree grepper trovare il file contenente la stringafilename nel nome.

tree -f | grep filename
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.