Rechercher un fichier par son nom en utilisant la ligne de commande

Je voudrais déterminer l'emplacement d'un fichier en utilisant la ligne de commande. J'ai essayé:

find . -type f -name "postgis-2.0.0"

et

locate postgis-2.0.0

en vain. Quelle est la commande pour déterminer le répertoire du fichier, à condition de son nom?

Essayer find ~/ -type f -name "postgis-2.0.0" plutôt.

Utiliser . ne recherchera que le répertoire actuel. ~/ recherchera l'intégralité de votre répertoire personnel (probablement l'endroit où vous l'avez téléchargé). Si vous avez utilisé wget en tant que root, il est possible que ce soit ailleurs pour que vous puissiez utiliser / pour rechercher l'ensemble du système de fichiers.

Goodluck

J'essaierais:

sudo find / -type d -name "postgis-2.0.0"

Le . signifie rechercher uniquement dans le répertoire actuel, il est préférable de tout rechercher à partir de la racine si vous ne le savez vraiment pas. De plus, type-f signifie rechercher des fichiers, pas des dossiers. Additionneur sudo lui permet de rechercher dans tous les dossiers / sous-dossiers.

Votre syntaxe pour locate est correct, mais vous devrez peut-être exécuter

sudo updatedb

premier. Pour une raison quelconque, je n'ai jamais de chance avec locate bien.

locate utilise une base de données de fichiers et de répertoires créés par updatedb. Donc, si vous avez téléchargé un nouveau fichier, il y a plus de chances que votre updatedb n'a pas mis à jour la base de données des fichiers et répertoires. Vous pouvez utiliser sudo updatedb avant utilisation locate programme utilitaire.updatedb fonctionne généralement une fois par jour sur les systèmes Linux.

Les autres réponses sont bonnes, mais je trouve en omettant Permission denied cela me donne des réponses plus claires (omet stderrs en raison de ne pas courir sudo):

find / -type f -iname "*postgis-2.0.0*" 2>/dev/null

où:

  • / peut être remplacé par le répertoire à partir duquel vous souhaitez lancer votre recherche
  • f peut être remplacé par d si vous recherchez un répertoire au lieu d'un fichier
  • -iname peut être remplacé par -name si vous souhaitez que la recherche soit sensible à la casse
  • le *s dans le terme de recherche peut être omis si vous ne voulez pas les caractères génériques dans la recherche

Une alternative est:

find / -type f 2>/dev/null | grep "postgis-2.0.0"

De cette façon, renvoie des résultats si le terme de recherche correspond n'importe où dans le chemin complet du fichier, par ex. /home/postgis-2.0.0/docs/Readme.txt

find est l'un des outils Linux/Unix les plus utiles.

Essayer find . -type d | grep DIRNAME

Essayer find . -name "*file_name*"

  • où vous pouvez changer ".'(regardez dans le répertoire courant) à ' / '(regardez dans l'ensemble du système) ou ' ~/'(regardez dans le répertoire personnel).

  • où vous pouvez changer "- name "en"- iname " si vous ne voulez pas de casse sensible.

  • où vous pouvez changer "nom_de_fichier"(un fichier qui peut commencer et se terminer par n'importe quoi) au nom exact du fichier.

Cela devrait simplifier la localisation du fichier:

Cela vous donnerait le chemin complet vers le fichier

tree -f  / | grep postgis-2.0.0

Tree répertorie le contenu des répertoires dans un format arborescent. le -f indique à tree de donner le chemin d'accès complet au fichier. puisque nous n'avons aucune idée de son emplacement ou de son emplacement parent, il est bon de rechercher à partir de la racine du système de fichiers / récursivement vers le bas.Nous envoyons ensuite la sortie à grep pour mettre en évidence notre mot, postgis-2.0.0

Alors find la commande est le moyen le plus simple de parcourir récursivement l'arborescence des répertoires, il existe d'autres moyens et en particulier les deux langages de script fournis avec Ubuntu par défaut ont déjà la capacité de le faire.

bash

bash a une très belle globstar option shell, qui permet une traversée récursive de l'arborescence des répertoires. Tout ce que nous devons faire est de tester si l'article dans le ./**/* qu'est-ce qu'un fichier et s'il contient le texte souhaité:

bash-4.3$ for f in ./**/* ;do [ -f "$f" ] && [[ "$f" =~ "postgis-2.0.0" ]] && echo "$f"; done ./testdir/texts/postgis-2.0.0

Perl

Perl a un module Find, qui permet d'effectuer une traversée récursive de l'arborescence des répertoires, et via un sous-programme d'effectuer une action spécifique sur eux. Avec un petit script, vous pouvez parcourir l'arborescence des répertoires, pousser les fichiers contenant la chaîne souhaitée dans un tableau, puis l'imprimer comme ceci:

#!/usr/bin/env perluse strict;use warnings;use File::Find;my @wanted_files;find(     sub{          -f $_ && $_ =~ $ARGV[0]                 && push @wanted_files,$File::Find::name     }, ".");foreach(@wanted_files){    print "$_\n"}

Et comment ça marche:

$ ./find_file.pl  "postgis-2.0.0"                                                       ./testdir/texts/postgis-2.0.0

Python

Python est un autre langage de script qui est très largement utilisé dans le monde Ubuntu. En particulier, il a os.walk() module qui nous permet d'effectuer la même action que ci - dessus-parcourir l'arborescence des répertoires et obtenir la liste des fichiers contenant la chaîne souhaitée.

En tant que one-liner, cela peut être fait comme suit:

$ python -c 'import os;print([os.path.join(r,i) for r,s,f in os.walk(".") for i in f if "postgis-2.0.0" in i])'                                                                         ['./testdir/texts/postgis-2.0.0']

Le script complet ressemblerait à ceci:

#!/usr/bin/env pythonimport os;for r,s,f in os.walk("."):    for i in f:        if "postgis-2.0.0" in i:            print(os.path.join(r,i))

$ find . -type f | grep IMG_20171225_*
Donner
./03-05--2018/IMG_20171225_200513.jpg
Le POINT après la commande find est d'énoncer un point de départ,
Par conséquent - le dossier actuel,
"canalisé" (=filtré) à travers le filtre de nom IMG_20171225_*

la commande ‘locate’ est correcte, il suffit de mettre à jour le locatedb en premier, en utilisant la commande ’ updatedb`

S’il est déjà installé, le nouveau nom de fichier pourrait ne plus être postgis-2.0.0. Habituellement, après les installations via les gestionnaires de paquets, les exécutables se trouvent dans l’un des dossiers PATH PATH, essayez which postgis pour voir l’emplacement. S’il ne renvoie rien, alors seulement vous devez rechercher manuellement l’emplacement du fichier.