Je veux trouver un fichier sur mon macbook avec le nom de fichier: abc.dmg
. J'ai essayé d'utiliser Spotlight, mais il ne l'a pas trouvé. Quand j'ai essayé de trouver, et utilisé find -name abc.dmg -path /
:, j'ai eu des erreurs en retour.
Quelle est la syntaxe appropriée pour rechercher un fichier par nom de fichier avec la commande find sur un terminal Mac OSX?
Réponses:
Dans sa forme la plus simple,
find
prend un paramètre: le chemin. Dans sa forme réellement utile, il emprunte le chemin suivi par des critères restrictifs.Ainsi, vous voulez:
find
(le programme)/
(le chemin), et-name abc.dmg
(le critère).la source
find
questions . Si doit êtrefind [path]+ [selection, grouping, and actions]
.find . -name '*.csv'
par exemple, a travaillé pour moi avec des wildcards. OP pourrait également utiliserfind . -name '*.dmg'
pour vérifier son répertoire actuel, en supposant qu'il soit dans/
.la source
La
mdfind
commande utilise la base de données Spotlighthttp://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html
la source
Vous pouvez utiliser la
locate
commande.la source
osx
balise. slocate db ne peuplera pas par défaut.locate
et lesmdfind
deux échouent, les chances sont que le fichier est pas sur votre machine. Ou ce n'est pas nommé comment vous pensez son nommé. Peut-être que la recherche de TOUS les DMG pourrait être votre prochaine étape?La manière la plus simple (que vous avez déjà déjà essayée, mais bon, laissez-moi l’ajouter quand même au fil) est d’entrer abc.dmg dans le champ de recherche situé en haut à droite de toute fenêtre du Finder, puis de sélectionner "Fichier". Nom "parmi les options de la barre de recherche qui apparaît.
Pas besoin de terminal.
N'oubliez pas non plus que Spotlight n'indexe que les répertoires spécifiés dans le panneau de configuration de Spotlight et que abc.dmg peut ne pas figurer dans l'un de ces répertoires.
Corrigez-moi si je me trompe, mais je pense que la commande find a besoin de savoir quoi afficher:
... devrait imprimer tous les résultats sur le terminal (y compris les erreurs d'autorisation).
Si vous ne voulez pas d'erreurs d'autorisation et souhaitez effectuer une recherche dans d'autres répertoires d'utilisateurs, procédez comme suit:
la source
Vous pouvez utiliser les fonctions de ligne de commande suivantes pour trouver et ouvrir rapidement un fichier pertinent. Je trouve cela plus facile que de taper une longue chaîne de requête dans la fenêtre Spotlight.
Ajouter les fonctions suivantes dans
~/.bash_aliases
.}
Maintenant,
source ~/.bash_aliases
ouvrez une nouvelle fonction de chargement du terminal ou ouvrez-la. Pour rechercher des fichiers avec des mots, un camembert et 2016 n'importe où dans le nom du fichier, faitesIl n’est pas nécessaire d’ajouter ou d’ajouter
*
à votre requête le motif de recherche, mais il'*$1*'
balise déjà les caractères génériques au début et à la fin de votre requête. Supplémentairecd
est pour insensibles à la casse et en ignorant les marques diacritiques, par exemple,fred
retournera les deux, Frédéric et Frédéric.findpaper
limitera la recherche aux résultats dans un chemin spécifique (récursif) toutopenpaper pie*201
en ouvrant un résultat de recherche (ou le premier des résultats multiples) ouopenpaper pie*201 3
en ouvrant une troisième entrée de résultat. Pour éviter d'ouvrir des scripts bash ou d'autres fichiers non documentés, vous pouvez limiter le contenu du fichier en utilisant des attributs de recherche supplémentaires. Voir Syntaxe d'expression des requêtes de métadonnées de fichier et https://ss64.com/osx/mdfind.html pour l'utilisation d'autres opérateurs de recherche.la source
Capturez une liste de tous les fichiers de votre disque en tant que racine depuis /
Cat du fichier entier via grep pour rechercher le lecteur entier:
Utilisez des expressions régulières pour afficher uniquement les fichiers .jpg et .dmg:
Résultat:
...etc. Malheureusement, tous les disques montés seront également capturés. Il est donc préférable d'éjecter ceux de Time Machine, car ils ont beaucoup de liens. Donc, dans une autre fenêtre, je lance
watch tail -n 10 ~/file-list.txt
ce qui me montre où cela en est dans mon ignoble hack!la source
sudo find / > ~/file-list.txt
semble mieux que d'exécuter le shell entier en tant que root. (2)find *
ignorera les objets cachés (points) (le cas échéant) dans/
. (3)&>
est un bashisme. (4) Utilisation inutile decat
. (5)grep abc.dmg
imprimera par exemple/foo/bar/123abcXdmg456/baz/whatever
. // Une bonne chose que votre réponse apporte à ce fil (et une autre réponse ne le fait pas) est l'approche où l'utilisateur exécutefind
une fois puis réutilise le résultat enregistré plusieurs fois sans interroger le (s) système (s) de fichiers encore et encore. Cet avantage potentiel n'est cependant pas accentué.