web-dev-qa-db-fra.com

Comment trouver un fichier par nom de fichier dans un terminal Mac OSX?

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 d'utiliser: 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?

101
SPRBRN

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 (les critères).

find / -name abc.dmg

137
VxJasonxV

find . -name '*.csv' par exemple a travaillé pour moi avec des caractères génériques. OP pourrait également utiliser find . -name '*.dmg' pour vérifier son répertoire actuel, en supposant qu'il soit dans /.

18
pjammer
7
Rich Homolka

Vous pouvez utiliser la commande locate.

locate abc.dmg
6
Wuffers

La manière la plus simple (que vous avez 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:

find / -name abc.dmg -print

... 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:

Sudo find / -name abc.dmg -print
3
Jupiter

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.

Ajoutez les fonctions suivantes dans ~/.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}")"

}

source ~/.bash_aliases ou ouvrez une nouvelle fonction de chargement du terminal. Pour rechercher des fichiers avec des mots, un camembert et 2016 n'importe où dans le nom du fichier, faites

spot pie*2016 #or
spot 2016*pie

Il n’est pas nécessaire d’ajouter ou de ajouter * à votre requête en tant que modèle de recherche, '*$1*' étiquette déjà l’entrée joker avec des caractères génériques au début et à la fin de votre requête. cd additionnel est destiné aux casse insensible à la casse et aux signes diacritiques ignorés, par exemple, fred retournera Frédéric et Frédéric.

findpaper limitera la recherche aux résultats sous un chemin spécifique (récursif) tandis que openpaper pie*201 ouvrira un résultat de recherche (ou le premier des résultats multiples) ou openpaper pie*201 3 ouvrira 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.

1
Samir