Comment find un file à partir de n'importe quel directory

J'essaye de chercher un file appelé Book1 .

Dans mon test, j'essaie de searchr le file mentionné ci-dessus et dans ce test, je ne sais pas où se trouve ce file.

J'ai essayé de find / -iname book1 mais il n'y a pas de sortie.

Comment find mon file appelé book1 en utilisant la command line si je ne sais pas où se trouve le file?

MODIFIER:

Mon scénario est décrit plus en détail ci-dessous:

  1. L'extension du file est inconnue
  2. Le nom exact (lettres majuscules, numbers, etc.) est inconnu
  3. L'location du file est inconnu

Tout d'abord, un argument à -iname est un model de shell. Vous pouvez en savoir plus sur les templates dans le manuel Bash . L'essentiel est que, pour que find réellement un file, le nom de file doit correspondre au model spécifié. Pour rendre une string de caractères insensible à la casse book1 match Book1.gnumeric vous devez soit append * , il ressemble à ceci:

 find / -iname 'book1*' 

ou spécifiez le nom complet:

 find / -iname 'Book1.gnumeric' 

Deuxièmement, -iname fera que find ignore le nom de file, donc si vous spécifiez -iname book1 il peut aussi find Book1 , bOok1 etc. Si vous êtes sûr que le file que vous searchz s'appelle Book1.gnumeric n'utilisez pas -iname mais -name , ce sera plus rapide:

 find / -name 'Book1.gnumeric' 

Troisièmement, n'oubliez pas de citer le model comme indiqué dans l' autre réponse .

Et enfin – êtes-vous sûr de vouloir searchr le file partout sur votre système? Il est possible que le file que vous searchz se trouve dans votre directory $HOME si vous avez travaillé dessus ou téléchargé depuis quelque part. Encore une fois, cela peut être beaucoup plus rapide.

EDIT :

J'ai remarqué que vous avez édité votre question. Si vous ne connaissez pas le nom de file complet, la capitalisation et l'location, vous devriez utiliser quelque chose comme ceci:

 find / -iname 'book1*' 

Je suggère également de mettre 2>/dev/null à la fin de la ligne pour masquer toutes les *permission denied* et d'autres erreurs qui seront présentes si vous appelez find tant qu'user non-root:

 find / -iname 'book1*' 2>/dev/null 

Et si vous êtes sûr que vous cherchez un seul file et qu'il n'y a qu'un seul file sur votre système qui corresponde aux critères que vous pouvez find pour sortir après avoir trouvé le premier file correspondant:

 find / -iname 'book1*' -print -quit 2>/dev/null 

Si vous savez que vous avez un file appelé book1.something , où l'location du file, la valeur exacte de something et le patron de capitalisation du nom de file sont tous inconnus:

 find / -iname 'book1.*' 

Si tout ce que vous savez, c'est que le nom de file contient le book mots, vous pouvez générer une list probablement beaucoup plus grande avec

 find / -iname '*book*' 

L'argument de -name est un model shell glob. Depuis le directory dans lequel se trouve le file, comparez:

 $ ls Book1 ls: cannot access 'Book1': No such file or directory $ ls Book1.* Book1.gnumeric 

Cela représente le type de search effectuée par -name . L'option -iname permet simplement une version insensible à la casse de ceci.

Vous pouvez essayer la command locate . Il utilise une database de noms de files pour faciliter la search.

Pour searchr tous les files correspondant *book1* , et ignorer la casse, vous pouvez utiliser

 locate -i book1 

si vous voulez searchr des files à partir de book1 vous devez faire vous-même le joker:

 locate -i 'book1*' 

Il est beaucoup plus rapide que la find , mais il est aussi actualisé que la dernière fois que la database a été actualisée.

Pour ce genre de tâches, je fais toujours: find / -iregex '.*Book1.*'

Cette forme prendrait soin des 3 points de votre scénario ( iregex est une expression rationnelle insensible à la casse, et le motif avec .* deux côtés correspondrait à n'importe quel personnage avant et après votre motif fixe de Book1). résultats que nécessaire mais vous êtes sûr de ne pas manquer le file)

La différence principale: si possible, soyez plus ressortingctif que d'utiliser simplement / , comme essayer seulement /home ou alors, sinon vous allez descendre dans certains directorys qui ne sont pas pertinents ( /sys , /dev , etc …)

Souvenez-vous cependant que les permissions Unix s'appliquent: si le file se trouve dans un directory pour lequel l'user exécutant la command find n'a pas access (execute) à droite, find ne pourra pas le find.