bash: ricerca con ls

1

C'è un comando bash che può essere usato come Spotlight o un'opzione con ls che stampa solo file contenenti determinati testi? Voglio essere in grado di aprire Terminal e digitare qualcosa ls -SOMEOPTION filename e trovare tutti i file che hanno filename nel loro nome, e questa opzione potrebbe essere utilizzata con -R e funzionerebbe come sostituto di Spotlight.

    
posta Arc676 07.11.2013 - 15:07
fonte

3 risposte

1

Per trovare tutti i file che contengono una determinata stringa, puoi utilizzare solo grep da solo:

grep -R /path/to/directory "myword"

Nell'esempio precedente, "myword" è ciò che stai cercando e /path/to/directory è la directory che desideri cercare. -R indica grep per eseguire una ricerca ricorsiva (vale a dire iniziare dal percorso specificato e accedere a ciascuna sottodirectory).

Modifica

Ho riletto la tua domanda e penso che tu stia cercando come trovare i file che hanno un determinato nome di file. Per questo uso:

find /path/to/directory -name "*glob*" -print

dove /path/to/directory è dove vuoi iniziare la tua ricerca (e find cercherà anche nelle sottodirectory) e "*glob*" è un nome di file completo o parziale che vuoi cercare. Tieni presente che puoi utilizzare caratteri jolly ( . e * per ogni singolo e più caratteri corrispondenti, rispettivamente) nel glob. Come variante a questo, puoi usare, come proposto da altri:

find /path/to/directory -name "*glob*" -exec ls -la {} \;

in quanto sopra, ciò che si inserisce dopo l'opzione -exec è un qualsiasi comando UNIX con parametri (in questo caso ls -la ). {} verrà sostituito dal nome file find trova e \; è una stringa di terminazione.

EDIT 2

Nota: i comandi sopra ti danno risultati simili a Spotlight, ma non usano affatto Spotlight.

Se desideri utilizzare Spotlight dalla riga di comando, puoi utilizzare il comando mdfind , che è un'interfaccia della riga di comando per Spotlight. Digitando mdfind da solo ti fornirai un aiuto rapido per usarlo con alcuni esempi. man mdfind ti fornirà un manuale più dettagliato.

In sostanza mdfind prende una stringa di ricerca (e modificatori facoltativi) come argomento ed è la stessa che dovresti digitare nel campo di testo di Spotlight quando lo usi in una GUI.

    
risposta data 07.11.2013 - 15:37
fonte
4
 find . -type f -name "*filename*" -exec grep -il 'mywordinthefile' {} \;
  • find cerca il file in modo ricorsivo in una directory.

  • I primi parametri sono la directory in cui vuoi cercare. Ecco . quindi la directory corrente. Puoi usare ~/Documents per esempio o qualsiasi altra directory.

  • L'opzione
  • -type f- serve solo per restituire file, non directory.

  • L'opzione
  • -name prende un modello per trovare nomi di file specifici.

  • grep è usato qui per trovare la parola / modello che vuoi nei file trovati da find .

risposta data 07.11.2013 - 15:11
fonte
0

Per trovare i file con una stringa specifica nel nome file, utilizzare

    find . -type f -name '*<filename>*' 2> /dev/null

Sostituisci <filename> con la stringa che vorresti cercare nel nome del file. Il reindirizzamento alla fine è quello di evitare errori di stampa quando determinati file / cartelle non sono accessibili.

Puoi inserire questo comando in uno script di shell, chiamato say, lsf che conterrebbe quanto segue:

find . -type f -name "*$1*" 2> /dev/null

Quindi rendilo eseguibile usando

chmod +x lsf

Puoi anche inserire questo nel tuo file ~/.bashrc o ~/.bash_profile invece di uno script di shell come descritto sopra (il comando è ancora chiamato lsf qui):

myls()
{
    find . -type f -name "*$1*" 2> /dev/null
}
alias lsf=myls
    
risposta data 07.11.2013 - 17:36
fonte

Leggi altre domande sui tag