4 votes

Comment puis-je rechercher un fichier sur l'ensemble de mon disque sans être bloqué de manière récursive dans /Volumes ?

Je cherche un fichier txt qui contient un mot. Cependant, lorsque je recherche mon disque dur (ou ma sauvegarde TimeCapsule), je reste toujours bloqué dans une recherche récursive de /Volumes/Disque dur (etc.).

Le lien dur (ou le lien souple, je ne suis pas sûr) fait que je n'arrive jamais à terminer la recherche.

Comment puis-je rechercher un fichier sur l'ensemble du disque dur (ou du disque de sauvegarde) sans rester bloqué en récursivité ?

4voto

jaume Points 13186

Utilisez locate , grep o find à la ligne de commande.

Ouvrez Applications>Utilitaires>Terminal et utilisez soit :

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

    Remplacez WORD par le mot que vous souhaitez rechercher. C'est de loin la le plus rapide méthode.

    Je vous recommande de recréer la base de données de localisation pour améliorer la précision :

    sudo /usr/libexec/locate.updatedb

    Notez que sous OS X, l'option locate La base de données est créée par l'utilisateur nobody . Cela signifie que les fichiers cachés à nobody ne sera pas indexé. Vous pouvez modifier /usr/libexec/locate.updatedb et le commenter (c'est-à-dire le préfixer avec # ) cette section :

    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

    afin qu'il soit indexé sous l'utilisateur root (ceci s'applique à OS X 10.8 (Mountain Lion), sur les autres versions d'OS X locate peuvent indexer les fichiers différemment).

  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

    Remplacez WORD par le mot que vous souhaitez rechercher et <OS volume> avec le nom de votre volume OS. Le site grep Les options utilisées sont les suivantes :

    • -R : effectue une recherche récursive dans le chemin spécifié, c'est-à-dire dans / . Si vous recherchez votre sauvegarde TimeCapsule, remplacez / avec quelque chose comme /Volumes/TimeCapsule .

    • --exclude-dir : exclut les dossiers spécifiés. Comme vous le voyez, j'exclue Spotlight, le dossier Versions et les dossiers locaux de TimeMachine. Si vous souhaitez effectuer une recherche sur votre lecteur local uniquement lorsque votre TimeCapsule est monté, ajoutez --exclude-dir /Volumes/TimeCapsule .

    • --include '*.txt' : raconte grep pour rechercher les fichiers qui correspondent à *.txt .

    En outre :

    • 2>/dev/null : envoie les erreurs à /dev/null pour que vous ne les voyiez pas.
  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

    Encore une fois, remplacez WORD par le mot que vous voulez rechercher et <OS volume> avec le nom de votre volume OS. Comme avant, 2>/dev/null envoie les erreurs à /dev/null pour que vous ne les voyiez pas, et si vous recherchez votre sauvegarde TimeCapsule, remplacez / avec quelque chose comme /Volumes/TimeCapsule .

    Le site find Les options utilisées sont les suivantes :

    • ! -path : exclure les chemins spécifiés. Si vous souhaitez effectuer une recherche sur votre lecteur local uniquement lorsque votre TimeCapsule est monté, ajoutez ! -path /Volumes/TimeCapsule/* .

    • -name *.txt : rechercher les fichiers nommés *.txt. Comme vous le voyez, j'exclue Spotlight, le dossier Versions et les dossiers locaux de TimeMachine.

    • -type f : rechercher uniquement les fichiers, ignorer les liens symboliques, les dossiers, etc.

    • grep -H WORD {} : grep file for WORD. -H forces grep pour imprimer le nom du fichier.

La sortie de l'une des commandes ci-dessus ressemble à ceci :

filename: matched line

par exemple, lors de la recherche de "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

Si vous voulez faire une recherche insensible à la casse, remplacez grep con grep -i ci-dessus.

0voto

zimbatm Points 2525

Vous pouvez utiliser le programme EasyFind . Il peut rechercher dans les fichiers et possède une interface graphique agréable.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X