Je voudrais déterminer l'emplacement d'un fichier en 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 que son nom soit?
command-line
directory
find
Sam007
la source
la source
locate
commande est correcte, il suffit de mettre à jour le situé, en utilisant la commandeupdatedb
postgis-2.0.0
plus l' être . Habituellement, après les installations via les gestionnaires de paquets, les exécutables se trouvent dans l’un des$PATH
dossiers, essayezwhich postgis
de voir l’emplacement. S'il ne renvoie rien, vous devez alors rechercher manuellement l'emplacement du fichier.Réponses:
Essayez à la
find ~/ -type f -name "postgis-2.0.0"
place.Utiliser
.
ne cherchera que dans le répertoire actuel.~/
effectuera une recherche dans tout votre répertoire personnel (probablement là où vous l'avez téléchargé). Si vous utilisezwget
root, il est possible que ce soit ailleurs, vous pouvez donc lancer/
une recherche dans tout le système de fichiers.Bonne chance
la source
wget
oui j'ai utilisé comme racine tellement/
travaillé merciJe voudrais essayer:
Le . signifie rechercher uniquement dans le répertoire en cours, il est préférable de tout rechercher à partir de la racine si vous ne savez vraiment pas. En outre, le type -f signifie la recherche de fichiers, pas de dossiers. L'ajout lui
sudo
permet de rechercher dans tous les dossiers / sous-dossiers.Votre syntaxe
locate
est correcte, mais vous devrez peut-être exécuterpremière. Pour une raison quelconque, je n'ai jamais de chance avec
locate
.locate
utilise la base de données des fichiers et des répertoires faites parupdatedb
. Donc, si vous avez téléchargé un nouveau fichier, il y a plus de chance que vous n'ayezupdatedb
pas mis à jour la base de données de fichiers et de répertoires. Vous pouvez utilisersudo updatedb
avant d'utiliserlocate
un programme utilitaire.updatedb
fonctionne généralement une fois par jour seul sur les systèmes linux.la source
find est l’un des outils Linux / Unix les plus utiles.
Essayer
find . -type d | grep DIRNAME
la source
Les autres réponses sont bonnes, mais je trouve que le fait d'omettre des
Permission denied
déclarations me donne des réponses plus claires (omisstderr
s en raison de l'absence d'exécutionsudo
):où:
/
peut être remplacé par le répertoire dans lequel vous voulez commencer votre recherchef
peut être remplacé pard
si vous recherchez un répertoire au lieu d'un fichier-iname
peut être remplacé par-name
si vous voulez que la recherche soit sensible à la casse*
s dans le terme de recherche peut être omis si vous ne voulez pas les caractères génériques dans la rechercheUne alternative est:
Cette méthode renvoie des résultats si le terme recherché correspond à n’importe quel endroit du chemin complet du fichier,
/home/postgis-2.0.0/docs/Readme.txt
la source
-regex
et-iregex
commutateurs pour la recherche avecRegular Expressions
, qui trouverait le chemin mentionne aussi bien. Suggestion de trouver un élément qui est un fichier (-type f
)grep
est alors plus coûteuse en ressources.Permission denied
se produit lorsque l'utilisateur n'a pas accès aux fichiers ou aux dossiers, l'utilisation desudo
before find permettra à find de voir tous les fichiers.-wholename
ou à la-iwholename
place de la tuyauterie versgrep
.Essayer
find . -name "*file_name*"
où vous pouvez remplacer "." (regardez dans le répertoire actuel) par "/" (regardez dans tout le système) ou "~ /" (regardez dans le répertoire de base).
où vous pouvez remplacer "-name" par "-iname" si vous ne souhaitez pas que les majuscules soient sensibles à la casse.
où vous pouvez changer " nom_fichier " (un fichier qui peut commencer et se terminer par quoi que ce soit) par le nom exact du fichier.
la source
Cela devrait simplifier la localisation du fichier:
Cela vous donnerait le chemin complet du fichier
Tree répertorie le contenu des répertoires dans un format arborescent. l'
-f
arborescence indique le chemin d'accès complet au fichier. comme nous n’avons aucune idée de son emplacement ni de son emplacement parent, il est bon de rechercher de la racine du système de fichiers de/
manière récursive vers le bas. Nous envoyons ensuite la sortie à grep pour mettre en évidence notre mot,postgis-2.0.0
la source
Bien que la
find
commande soit le moyen le plus simple pour parcourir récursivement l’arborescence de répertoires, il existe d’autres méthodes, notamment les deux langages de script fournis avec Ubuntu par défaut.frapper
bash
a une très bonneglobstar
option shell, qui permet une traversée récursive de l’arborescence. Tout ce que nous avons à faire est de vérifier si un élément de l'./**/*
extension est un fichier et s'il contient le texte souhaité:Perl
Perl a le module Find qui permet d’effectuer une traversée récursive de l’arborescence de répertoires et d’effectuer une action spécifique sur ces sous-routines. Avec un petit script, vous pouvez parcourir l'arborescence de répertoires, pousser les fichiers contenant la chaîne souhaitée dans un tableau, puis les imprimer comme suit:
Et comment ça marche:
Python
Python est un autre langage de script très utilisé dans le monde Ubuntu. En particulier, il a un
os.walk()
module qui nous permet d’effectuer la même action que celle décrite ci-dessus - arborescence de répertoires et d’obtenir la liste des fichiers contenant la chaîne désirée.En une ligne, cela peut être fait comme suit:
Le script complet ressemblerait à ceci:
la source
$ find . -type f | grep IMG_20171225_*
Dote
./03-05--2018/IMG_20171225_200513.jpg
le DOT après la commande
find
doit énoncer un point de départ,donc - le dossier en cours,
"piped" (= filtré) à travers le filtre de noms
IMG_20171225_*
la source