2010-12-28 17:42:34 +0000 2010-12-28 17:42:34 +0000
133
133

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

Je veux trouver un fichier sur mon Macbook avec le nom de fichier : abc.dmg. J'ai essayé d'utiliser le projecteur, mais il ne le trouve pas. Lorsque j'ai essayé de trouver, et que j'ai utilisé : find -name abc.dmg -path /, j'ai reçu des erreurs.

Quelle est la syntaxe correcte pour trouver un fichier par nom de fichier avec la commande find sur un terminal Mac OSX ?

Réponses (7)

182
182
182
2010-12-28 17:45:50 +0000

Dans sa forme la plus simple, find prend un paramètre : le chemin. Dans sa forme réellement utile, il prend le chemin suivi par des critères de rétrécissement.

Ainsi, vous voulez :

  • find (le programme)
  • / (le chemin), et
  • -name abc.dmg (les critères).
find / -name abc.dmg
26
26
26
2016-10-27 14:11:10 +0000

find . -name '*.csv', par exemple, a travaillé pour moi avec des jokers. OP pouvait également utiliser find . -name '*.dmg' pour vérifier son répertoire actuel, en supposant qu'il était dans /.

10
10
10
2010-12-28 19:21:39 +0000

La commande mdfind utilise la base de données Spotlight http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html

6
6
6
2010-12-28 17:44:14 +0000

Vous pouvez utiliser la commande locate.

locate abc.dmg
3
3
3
2010-12-28 22:53:12 +0000

La façon la plus simple (que vous avez sûrement déjà essayée, mais bon, laissez-moi l'ajouter au fil de discussion de toute façon) est d'entrer abc.dmg dans la boîte de recherche en haut à droite de n'importe quelle fenêtre de recherche, puis de sélectionner “Nom de fichier” dans les options de la barre de recherche qui apparaît.

Pas besoin de terminal.

Souvenez-vous aussi que Spotlight n'indexe que les répertoires spécifiés dans le panneau de configuration de Spotlight et abc. dmg peut ne pas se trouver dans un de ces répertoires.

Corrigez-moi si je me trompe, mais je pense que la commande find doit savoir ce qu'elle doit afficher :

find / -name abc.dmg -print

…devrait imprimer tous les résultats au terminal (y compris les erreurs de permission).

Si vous ne voulez pas d'erreurs de permission et que vous voulez rechercher dans d'autres répertoires d'utilisateurs alors :

sudo find / -name abc.dmg -print
2
2
2
2018-02-09 04:28:07 +0000

Vous pouvez utiliser les fonctions de ligne de commande suivantes pour trouver et ouvrir rapidement le fichier concerné. Je trouve cela plus facile que de taper une longue chaîne de requête dans la fenêtre du projecteur.

Ajouter 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}")"

}

Maintenant, soit source ~/.bash_aliases soit ouvrir une nouvelle fonction de chargement de terminal. Pour rechercher des fichiers avec des mots, pie et 2016 n'importe où dans le nom du fichier, faites

spot pie*2016 #or
spot 2016*pie

Il n'est pas nécessaire de précéder ou d'ajouter * à votre requête comme modèle de recherche, '*$1*' marque déjà l'entrée de joker au début et à la fin de votre requête. L'ajout de cd permet de ne pas tenir compte de la casse ni des signes diacritiques, par exemple, fred renvoie à la fois Frédéric et Frédéric.

findpaper limitera la recherche aux résultats situés sous un chemin spécifique (récursif) tandis que openpaper pie*201 ouvrira un résultat de recherche (ou le premier de plusieurs résultats) 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 documentaires, vous pouvez restreindre le contenu du fichier par des attributs de recherche supplémentaires. Voir File Metadata Query Expression Syntax et https://ss64.com/osx/mdfind.html pour l'utilisation d'autres opérateurs de recherche.

0
0
0
2019-06-09 11:50:48 +0000

Capturez une liste de tous les fichiers de votre disque en tant que racine à partir de /002 sudo find / &> ~/file-list.txt sudo chown $(whoami) ~/file-list.txt

Cat the entire file through grep to search entire drive :

cat ~/file-list.txt | grep abc.dmg

Utilisez des expressions régulières pour afficher uniquement les fichiers .jpg et .dmg :

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"

Résultat :

Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

…etc. Malheureusement, il capture également tous les disques montés, il vaut donc mieux éjecter ceux de Time Machine qui ont beaucoup de liens. Donc dans une autre fenêtre, je lance watch tail -n 10 ~/file-list.txt qui me montre où en est mon piratage ignoble !