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