web-dev-qa-db-fra.com

Trouver tous les fichiers avec une certaine extension sous Unix?

J'ai un fichier /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

J'essaie de trouver si j'ai le * .jdk ailleurs sur mon disque dur. Alors je fais une commande de recherche:

find . -name "*.jdk"

Mais il ne trouve rien. Pas même celui que je connais que j'ai. Comment venir? 

48
Prostak

find . ne regarde que dans votre répertoire actuel. Si vous êtes autorisé à rechercher des fichiers dans d'autres répertoires (accès root), vous pouvez utiliser les éléments suivants pour rechercher votre fichier:

find / -type f -name "*.jdk"

Si vous recevez des tonnes de messages d’autorisation refusés, vous pouvez les supprimer en faisant

find / -type f -name "*.jdk" 2> /dev/null
94
jaypal singh

une/ 

find . signifie "rechercher (à partir du répertoire en cours)". Si vous souhaitez effectuer une recherche dans tout le système, utilisez find /; pour rechercher sous /System/Library, utilisez find /System/Library, etc.

b /

Il est préférable d'utiliser des guillemets simples autour des caractères génériques. S'il n'y a aucun fichier nommé * .jdk dans le répertoire de travail lorsque vous l'exécutez, alors find obtiendra une ligne de commande de:

    find . -name *.jdk

Cependant, si vous avez des fichiers junk.jdk et foo.jdk dans le répertoire current lorsque vous l’exécutez, find sera démarré avec:

    find . -name junk.jdk foo.jdk

… Ce qui va (puisqu'il y en a deux) le confondre et le rendre erroné. Si vous supprimez ensuite foo.jdk et refait exactement la même chose, vous devriez

    find . -name junk.jdk

… Qui ne trouverait jamais un fichier nommé (par exemple) 1.6.0.jdk.

Ce que vous voulez probablement dans ce contexte, c'est

    find /System -name '*.jdk'

… Ou vous pouvez "échapper" au * en tant que:

    find /System -name \*.jdk
10
BRPocock

Vos JDK sont probablement en majuscule et/ou la version de find disponible sur OS X ne prend pas par défaut la valeur -print si aucune action n'est spécifiée; essayer:

find . -iname "*.jdk" -print

(-iname est semblable à -name mais effectue une correspondance sans distinction de casse; -print dit à find pour imprimer les résultats)

--- MODIFIER ---

Comme l'a noté @Jaypal, évidemment find . ... ne regarde que dans le répertoire actuel (et les sous-répertoires), si vous souhaitez effectuer une recherche sur l'ensemble du lecteur, vous devez spécifier / comme chemin de recherche.

6
Matteo Italia

Le '.' vous utilisez est le répertoire en cours. Si vous commencez dans votre répertoire personnel, il manquera probablement les fichiers JDK.

La recherche de pire cas doit commencer à partir de la racine

 find / -name '*.jdk' -o -name '*.JDK' -print

Sinon, remplacez '/' par un chemin qui, vous en êtes certain, devrait être le parent de vos fichiers JDK.

J'espère que ça aide.

2
shellter

find/-type f -name "* .jdk" fonctionne aussi sur Mac

0
Dajena