Stai cercando un Mac tramite Terminale?


22

ci sono dei comandi per cercare il tuo Mac usando il terminale? Ho provato a utilizzare grep per cercare, ma sembra in qualche modo non rispondere e non succede nulla.

Ad esempio, digitare "grep Files" (un nome di cartella) e stampa solo una riga vuota e non succede nulla.



Sono interessato a cercare tutti i tipi di file; Non necessariamente escludendo file di testo ma non solo file di testo.
JFW,

Risposte:


21

È inoltre possibile utilizzare il mdfindcomando per eseguire una ricerca con Spotlight. Maggiori informazioni qui .

Utilizzare mdfind -name searchtermper recuperare i file con il nome searchterm. Utilizzare mdfind searchtermper eseguire una ricerca sul nome e sul contenuto del file.


25

Se vuoi solo trovare file con un certo nome, usa find

La pagina man può essere trovata QUI o digitando man findal prompt del terminale.

Fondamentalmente, find cercherà ricorsivamente un file che soddisfi i criteri specificati. L'esempio più semplice:

find . -name file_name -print

Che cercherà un file chiamato "nome_file" che inizia nella directory corrente e cerca di seguito e stampa i file con quel nome.

find ~ -name ".DS_Store" -delete

Questo troverà tutti i file .DS_Store e li cancellerà.

Puoi cercare per nome, regex, data. Puoi agire sul file in qualsiasi modo Unix con il -execpredicato.

È inoltre possibile utilizzare trova come inizio di una pipeline di azioni più complessa. Esempio:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

Troverà tutti i file con estensione .m4a o .mp3

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

Ti darà un conteggio di quei file.


Se -printè l'unico predicato, può essere omesso; inoltre, sono disponibili semplici globbing. In questo modo sarebbe possibile trovare tutti i .txtfile in una directory fooconfind foo -name \\*.txt
Norman Gray il

@yoshi: è assolutamente falso. La digitazione find .è ricorsiva dal CWD. Prova a digitare find .nella directory principale!
Drewk,

Il mio male potrebbe giurare che non è ricorsivo, ma forse il server è bloccato -shrug-
nuala,

5

Se vuoi cercare in un'intera cartella, usa -r su grep:

grep -r pattern folder/to/search

Con find, puoi anche usare xargs:

find folder/to/search -name '*.txt' | xargs grep pattern

o per assicurarti di cercare due file alla volta e quindi di specificare i nomi dei file:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern

2

grepsi aspetta sia un modello che un filepec. Se ne manca uno, utilizza ciò che viene passato come modello e attende la ricerca dei dati tramite input standard.

Se si desidera utilizzare un filepec più complesso, utilizzare find.

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print

In pratica, voglio solo che trovi i file che hanno il nome che ho inserito nel comando.
JFW,

In tal caso non è necessario utilizzare il -execpredicato in find.
Ignacio Vazquez-Abrams,
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.