Recherche sur Mac via un terminal?

22

existe-t-il des commandes pour rechercher votre Mac à l'aide du terminal? J'ai essayé d'utiliser grep pour rechercher, mais cela semble quelque peu insensible et rien ne se produit.

Par exemple, je taperais "Fichiers grep" (un nom de dossier) et il imprime juste une ligne vierge et rien ne se passe.

JFW
la source
doublon possible de la recherche dans les fichiers texte sous Mac OS X
Chealion
Je suis intéressé à rechercher dans tous les types de fichiers; N'excluant pas nécessairement les fichiers texte mais pas uniquement les fichiers texte.
JFW

Réponses:

21

Vous pouvez également utiliser la mdfindcommande afin d'effectuer une recherche avec Spotlight. Plus d'infos ici .

Utilisez mdfind -name searchtermpour récupérer des fichiers avec le nom searchterm. Utilisez mdfind searchtermpour effectuer une recherche sur le nom et le contenu du fichier.

reg
la source
25

Si vous souhaitez simplement rechercher des fichiers portant un certain nom, utilisez find

La page de manuel peut être trouvée ICI ou en tapant man findà l'invite du terminal.

Fondamentalement, find recherchera récursivement un fichier répondant aux critères que vous spécifiez. L'exemple le plus simple:

find . -name file_name -print

Cela recherchera un fichier nommé "nom_fichier" commençant dans le répertoire courant et recherchant ci-dessous et imprimera les fichiers avec ce nom.

find ~ -name ".DS_Store" -delete

Cela trouvera tous les fichiers .DS_Store et les supprimera.

Vous pouvez rechercher par nom, expression régulière, date. Vous pouvez agir sur le fichier de n'importe quelle manière Unix avec le -execprédicat.

Vous pouvez également utiliser find comme début d'un pipeline d'actions plus complexe. Exemple:

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

Trouve tous les fichiers avec les extensions .m4a ou .mp3

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

Vous donnera un décompte de ces fichiers.

drewk
la source
Si -printest le seul prédicat, il peut être omis; De plus, il existe des globes simples. Ainsi, trouver tous les .txtfichiers dans un répertoire se fooferait avecfind foo -name \\*.txt
Norman Gray
@yoshi: C'est absolument faux. La saisie find .est récursive à partir du cwd. Essayez de taper find .dans votre répertoire racine!
drewk
Mon mauvais pourrait jurer qu'il n'était pas récursif mais peut-être que le serveur a étouffé -shrug-
nuala
5

Si vous souhaitez rechercher dans un dossier entier, utilisez simplement -r sur grep:

grep -r pattern folder/to/search

Avec find, vous pouvez également utiliser xargs:

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

ou pour vous assurer que vous recherchez deux fichiers à la fois et que les noms de fichiers sont donc spécifiés:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern
Eric Darchis
la source
2

grepattend à la fois un modèle et une spécification de fichier. S'il en manque un, il utilise ce qui est passé comme modèle et attend que les données soient recherchées via une entrée standard.

Si vous souhaitez utiliser une spécification de fichier plus complexe, utilisez find.

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print
Ignacio Vazquez-Abrams
la source
Je veux simplement qu'il trouve des fichiers qui portent le nom que j'entre dans la commande.
JFW
Dans ce cas, vous n'avez pas besoin d'utiliser le -execprédicat dans find.
Ignacio Vazquez-Abrams