Comment trouver un fichier dans FreeBSD


14

J'essaie de localiser toutes les copies de example.filenamesur mon serveur FreeBSD. Quelle est la meilleure façon / la plus simple / la plus efficace de le faire?


1
Bien que les réponses soient similaires, vous voudrez peut-être préciser si vous utilisez Linux ou FreeBSD. Ce n'est pas la même chose.
Greg Hewgill

titre modifié pour rendre le système d'exploitation plus spécifique
Ian

Cela devrait probablement être étiqueté FreeBSD, mais je n'ai pas la réputation de le faire.
mikl

Réponses:


18
find / -name example.filename

2
Fiable, mais lent. Parfois très lent.
dmckee --- chaton ex-modérateur

3
autres indicateurs 'find' qui peuvent être appropriés, selon le besoin: -type f (ne dérange pas avec les répertoires ou les liens symboliques avec le même nom) -ls (pour afficher des détails tels que la taille du fichier, par exemple si les fichiers ont le même nom mais contenu différent)
Zac Thompson

19
locate filename

Bien plus que find, si vous utilisez le service de localisation, et il trouve que les fichiers qui existaient au moment de la updatedbdernière exécution (usualy la nuit befor sous le contrôle d'une tâche cron).

Vous pouvez courir updatedbà la main, mais cela est encore plus lent que le findcletus ne le suggère et nécessite une racine. Je mets parfois à jour la base de données à la main après avoir installé un tas de nouvelles choses.


3
La localisation ne fonctionne que si vous avez le service en cours d'exécution pour construire la base de données de localisation (oubliez son nom). Il peut également souffrir de retard (dans la mesure où le fichier que vous recherchez peut avoir été ajouté depuis la dernière génération).
cletus le

Retouches et commentaires croisés sur le fil. Cool. Vous avez bien sûr raison sur les deux points.
dmckee --- chaton ex-modérateur

4
Si vous vous trouvez en train de faire find /ou sur un grand arbre plus d'une fois par semaine, alors exécuter le locateservice en vaut la peine, car locate(1)c'est tellement plus rapide.
Drew Stephens

@cletus Running sudo periodic weeklymet à jour la locatebase de données. Exécutez-le après toute installation ou téléchargement pouvant contenir les fichiers que vous désirez.
Basil Bourque

2

Si vous avez installé Locate (aka slocate), alors

locate example.filename

Locate exécute une tâche cron tous les soirs qui réindexe tous les fichiers de votre machine. Ce n'est pas toujours à jour pour cette raison.


2

Parfois, vous souhaitez rechercher des fichiers à un niveau de répertoire spécifique. Dans ce cas, il peut être pratique d'utiliser des caractères génériques shell:

ls /data/*/example.filename

Évidemment, cela ne fonctionne que si vous avez une structure de répertoire rigide.


1

locate

Comme d'autres l'ont mentionné, locatec'est le moyen rapide de trouver un fichier. Cette commande utilise un index précompilé des noms de fichiers et de dossiers. Cette base de données de noms est recherchée, plutôt que de parcourir votre système de fichiers.

locate example.filename 

Pour être insensible à la casse, ajoutez -i.

locate -i eXAmPle.FileName

Mettre à jour la locatebase de données

La base de données utilisée par locatedoit être à jour. Après avoir effectué une installation ou un téléchargement pouvant contenir le fichier souhaité, vous devez mettre à jour la locatebase de données.

La locatebase de données sera éventuellement mise à jour automatiquement par votre système FreeBSD. Un ensemble hebdomadaire de tâches comprend cette tâche. Ces tâches sont répertoriées dans le /etc/periodic/weekly/310.locatescript.

Le moyen le plus simple et le plus sûr de forcer la mise à jour précoce de la locatebase de données est de forcer le travail hebdomadaire à effectuer maintenant.

sudo periodic weekly

Ou, vous pouvez même forcer toutes les tâches régulières à effectuer. Vous voudrez peut-être le faire immédiatement après avoir configuré un nouveau système FreeBSD.

sudo periodic daily weekly monthly

Si vous utilisez d'autres moyens pour mettre à jour la locatebase de données, vous pouvez recevoir un message indiquant qu'il n'est pas sûr, révélant les noms de tous les fichiers de votre système à n'importe quel utilisateur du système FreeBSD. L'utilisation de l' periodicitinéraire évite ce problème.


0

Si vous avez la base de données de localisation à jour, alors:

locate example.filename

0

Je fais parfois


  find . | grep example.filename

probablement extrêmement inefficace cependant.


Ouaip, cela correspond à tout puis jette tout sauf le nom que vous cherchiez. Au lieu de cela, vous pouvez simplement faire 'find -name "example.filename"' qui fait exactement la même chose sans tout d'abord imprimer et sans exécuter un processus grep supplémentaire.
Mihai Limbăşan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.