Come posso cercare l'intero disco per un file senza dover ricorrere in modo ricorsivo in / Volumi?

4

Sto cercando un file txt che contenga una parola. Tuttavia, quando cerco il mio disco rigido (o il mio backup TimeCapsule) mi blocco sempre in una ricerca ricorsiva di / Volumi / Disco rigido (ecc.).

L'hardlink (o il softlink, non sono sicuro) mi impedisce di completare la ricerca.

Come posso cercare l'intero disco rigido (o unità di backup) per un file senza rimanere bloccato nella ricorsione?

    
posta random65537 07.03.2013 - 01:36
fonte

2 risposte

4

Utilizza locate , grep o find nella riga di comando.

Apri Applicazioni > Utilità > Terminale e utilizza:

  1. sudo locate -0 '*.txt' | xargs -0 grep WORD 2>/dev/null

    Sostituisci WORD con la parola che vuoi cercare. Questo è di gran lunga il metodo più veloce .

    Consiglierei di ricreare il database di localizzazione prima per migliorare la precisione:

    sudo /usr/libexec/locate.updatedb

    Da notare che su OS X, il database locate viene creato dall'utente nobody . Ciò significa che i file nascosti a nobody non verranno indicizzati. Puoi modificare /usr/libexec/locate.updatedb e commentare (cioè prefisso con # ) questa sezione:

    if [ "$(id -u)" = "0" ]; then
         rc=0
         # 2013-03-08 jaume Correct mktemp
         export FCODES='mktemp --tmpdir updatedbXXXX'
         chown nobody $FCODES
         tmpdb='su -fm nobody -c "$0"' || rc=1
         if [ $rc = 0 ]; then
             install -m 0444 -o nobody -g wheel $FCODES /var/db/locate.database
         fi
         rm $FCODES
         exit $rc
     fi
    

    in modo che sia indicizzato dall'utente root (questo vale per OS X 10.8 (Mountain Lion), su altre versioni OS X locate può indicizzare i file in modo diverso).

  2. sudo grep -R --exclude-dir '/Volumes/<OS volume>' --exclude-dir '/Volumes/MobileBackups' --exclude-dir '/.Spotlight*' --exclude-dir '/.MobileBackups' --exclude-dir '/.DocumentRevisions*' --include '*.txt' WORD / 2>/dev/null

    Sostituisci WORD con la parola che vuoi cercare e <OS volume> con il nome del tuo volume del SO. Le opzioni grep utilizzate sono:

    • -R : esegue una ricerca ricorsiva nel percorso specificato, ovvero in / . Se cerchi il backup di TimeCapsule, sostituisci / con qualcosa come /Volumes/TimeCapsule .

    • --exclude-dir : esclude le cartelle specificate. Come puoi vedere, escludo Spotlight, la cartella Versions e le cartelle TimeMachine locali. Se vuoi cercare il tuo disco locale solo mentre è montato TimeCapsule, aggiungi --exclude-dir /Volumes/TimeCapsule .

    • --include '*.txt' : indica grep per cercare file che corrispondono a *.txt .

    In aggiunta:

    • 2>/dev/null : invia errori a /dev/null in modo che tu non li veda.
  3. sudo find / ! -path '/.Spotlight*' ! -path '/Volumes/<OS volume>/*' ! -path '/Volumes/MobileBackups/*' ! -path '/.MobileBackups/*' ! -path '/.DocumentRevisions*' -name *.txt -type f -exec grep -H WORD {} + 2>/dev/null

    Ancora una volta, sostituisci WORD con la parola che vuoi cercare e <OS volume> con il nome del tuo volume del SO. Come prima, 2>/dev/null invia errori a /dev/null in modo che tu non li veda, e se cerchi il tuo backup TimeCapsule, sostituisci / con qualcosa come /Volumes/TimeCapsule .

    Le opzioni find utilizzate sono:

    • ! -path : percorsi di esclusione specificati. Se vuoi cercare il tuo disco locale solo mentre è montato TimeCapsule, aggiungi ! -path /Volumes/TimeCapsule/* .

    • -name *.txt : file di ricerca denominati * .txt. Come puoi vedere, escludo Spotlight, la cartella Versions e le cartelle TimeMachine locali.

    • -type f : cerca solo file, ignora collegamenti simbolici, cartelle, ecc.

    • grep -H WORD {} : file grep per WORD. -H forza grep per stampare il nome file.

L'output di uno dei comandi sopra è simile a questo:

filename: matched line

per esempio, durante la ricerca di 'GNU':

/usr/local/share/doc/p7zip/DOCS/readme.txt:7-Zip is free software distributed under the GNU LGPL 
/usr/local/share/doc/p7zip/DOCS/readme.txt:1) You can compile and use compiled files under GNU LGPL rules, since 
/usr/local/share/doc/p7zip/DOCS/readme.txt:  copying.txt    - GNU LGPL license
/usr/local/share/doc/xz/history.txt:    Alexandre Sauvé helped converting the build system to use GNU

Se vuoi eseguire una ricerca senza distinzione tra maiuscole e minuscole, sostituisci grep con grep -i sopra.

    
risposta data 07.03.2013 - 06:58
fonte
0

Potresti utilizzare il programma EasyFind . Può cercare all'interno di file e ha una buona interfaccia grafica.

    
risposta data 19.03.2014 - 02:14
fonte

Leggi altre domande sui tag