2010-12-28 17:42:34 +0000 2010-12-28 17:42:34 +0000
133
133

Come faccio a trovare un file per nome file nel terminale Mac OSX?

Voglio trovare un file sul mio Macbook con il nome del file: abc.dmg. Ho provato a usare il riflettore, ma non lo trova. Quando ho provato a trovare, e ho usato: find -name abc.dmg -path /, ho ottenuto degli errori.

Qual è la sintassi corretta per trovare un file per nome file con il comando trova su un terminale Mac OSX?

Risposte (7)

182
182
182
2010-12-28 17:45:50 +0000

Nella sua forma più semplice, find prende un parametro: il percorso. Nella sua forma effettivamente utile, prende il percorso seguito da criteri di restringimento.

Quindi, si desidera:

  • find (il programma)
  • / (il percorso), e
  • -name abc.dmg (i criteri).
find / -name abc.dmg
26
26
26
2016-10-27 14:11:10 +0000

find . -name '*.csv' per esempio ha lavorato per me con i jolly. OP potrebbe anche usare find . -name '*.dmg' per controllare la sua directory attuale, supponendo che fosse in /.

10
10
10
2010-12-28 19:21:39 +0000

Il comando mdfind utilizza il database Spotlight http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html

6
6
6
2010-12-28 17:44:14 +0000

È possibile utilizzare il comando locate.

locate abc.dmg
3
3
3
2010-12-28 22:53:12 +0000

Il modo più semplice (che sono sicuro abbiate già provato, ma ehi, lasciate che lo aggiunga comunque al thread) è di inserire abc.dmg nella casella di ricerca in alto a destra di qualsiasi finestra di ricerca, quindi selezionare “Nome file” dalle opzioni della barra di ricerca che appare.

Non è necessario il terminale.

Ricordate anche che Spotlight indicizza solo le directory specificate nel pannello di controllo Spotlight e abc. dmg potrebbe non essere in una di queste directory.

Correggetemi se sbaglio, ma credo che il comando di ricerca debba sapere cosa produrre:

find / -name abc.dmg -print

…dovrebbe stampare tutti i risultati sul terminale (compresi gli errori di autorizzazione).

Se non volete errori di autorizzazione e volete cercare altre directory di utenti, allora:

sudo find / -name abc.dmg -print
2
2
2
2018-02-09 04:28:07 +0000

È possibile utilizzare le seguenti funzioni della riga di comando per trovare e aprire rapidamente i file rilevanti. Trovo che sia più facile che digitare una lunga stringa di query in una finestra di spotlight.

Aggiungete le seguenti funzioni in ~/.bash_aliases.

# find any item matching search query in file name
spot(){
  mdfind "kMDItemDisplayName=='*$1*'cd";
}

# restrict to files under (recursive) a specific path 
findpaper(){
    mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}

# default to open the first entry unless 2nd positional argument is given
openpaper(){
    FILEID=$(printf "%sp" ${2:-1})

    open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"

}

Ora, o source ~/.bash_aliases o aprire una nuova funzione di caricamento del terminale. Per cercare file con parole, pie e 2016 in qualsiasi punto del nome del file, fare

spot pie*2016 #or
spot 2016*pie
``` &001 


Non c'è bisogno di prependere o aggiungere `*` alla vostra query come modello di ricerca, `'*$1*'` etichetta già la voce jolly all'inizio e alla fine della query. L'aggiunta di `cd` è per i segni diacritici non sensibili alle maiuscole e che ignorano i segni diacritici, ad esempio, `fred` restituirà entrambi, Frédéric e FrEDeric. 


`findpaper` limiterà la ricerca ai risultati sotto un percorso specifico (ricorsivo) mentre `openpaper pie*201` aprirà un risultato di ricerca (o il primo di più risultati) o `openpaper pie*201 3` aprirà la terza voce del risultato. Per evitare di aprire script bash o altri file non documentali, è possibile limitare il contenuto dei file con ulteriori attributi di ricerca. Vedere [ File Metadata Query Expression Syntax ](https://developer.apple.com/library/content/documentation/Carbon/Conceptual/SpotlightQuery/Concepts/QueryFormat.html) e [ https://ss64.com/osx/mdfind.html ](https://ss64.com/osx/mdfind.html) per l'utilizzo di altri operatori di ricerca.
0
0
0
2019-06-09 11:50:48 +0000

Catturare un elenco di ogni file sul disco come root da /

sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt
``` ```
cat ~/file-list.txt | grep abc.dmg

Catturare l'intero file attraverso grep per cercare l'intera unità:

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"
``` ```
Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

Utilizzare espressioni regolari per mostrare solo i file .jpg e .dmg:

&001 &001

Risultato:

&001

…ecc. Purtroppo catturerà anche tutti i dischi montati in modo da espellere al meglio quelli della Time Machine che hanno molti link. Così in un'altra finestra eseguo watch tail -n 10 ~/file-list.txt che mi mostra dove si trova nel mio scellerato hack!