GNU/Linux >> Tutoriels Linux >  >> Linux

Vous rencontrez des problèmes avec les répertoires d'élagage des commandes de recherche ?

Je ne sais pas ce que je fais de mal à ce sujet. J'ai lu un tas d'articles et de sites Web, mais j'ai toujours des problèmes.

J'ai besoin de vérifier un système pour les fichiers qui ont changé au cours de la dernière journée, mais je dois ignorer certains dossiers montés car ils sont montés sur des lecteurs avec des tonnes de To.

Voici la configuration :
J'ai quelques lecteurs montés dans des dossiers à l'intérieur de /usr/local/connect/
/usr/local/connect/logs –> se monte sur un NFS
/usr/ local/connect/DR01 – > se monte sur un partage DR
quelques autres comme celui-ci…

Je veux exécuter une commande de recherche normale (ou toute commande qui fonctionnerait pour cela) qui exclut ces répertoires. Voici quelque chose que j'ai essayé et qui n'a pas semblé fonctionner.

trouver . ! -chemin "/usr/local/connect/" -type f -nom "*.txt" -mtime -1

trouver . -type f -path "/usr/local/connect/" -prune -o -name "*.txt" -mtime -1

Aucun de ceux-ci ne semble fonctionner. J'ai également essayé de le faire dans différents ordres (comme -type f en premier, ou élaguer en premier, etc.). Mais j'ai lu prune supprime le chemin de procédure. Cela semble être une chose facile à faire. Faites-moi savoir si vous voyez mon erreur! Merci d'avance !

Réponse acceptée :

-path "/usr/local/connect/" correspondrait uniquement sur un chemin de fichier qui est exactement /usr/local/connect/ . Cela ne correspondra jamais car avec find . , tous les chemins commenceront par .

Alors vous voudriez :

find / -path '/usr/local/connect/*' -type d -prune -o \
       -name '*.txt' -type f -mtime -1 -print

Le -print est également important. Sans cela, il y aurait un -print implicite pour les fichiers qui correspondent à l'expression entière (donc les deux parties du -o ).

Notez que vous pouvez également utiliser -xdev pour empêcher de franchir les limites du système de fichiers.

Si vous voulez l'exécuter avec find . lorsque le répertoire courant est /usr/local , cela devrait être :

cd /usr/local &&
  find . -path './connect/*' -type d -prune -o \
         -name '*.txt' -type f -mtime -1 -print

Linux
  1. Rechercher un fichier avec les commandes Rechercher et Localiser sous Linux

  2. Commandes de recherche Linux

  3. Comment copier/déplacer des fichiers et des répertoires sous Linux avec les commandes "cp" et "mv"

  4. Rechercher et remplacer par sed dans le répertoire et les sous-répertoires

  5. bash trouver des répertoires

Qu'est-ce que Git Bash ? Travailler avec les commandes Git Bash

Aide-mémoire des commandes Linux :avec des exemples

Rechercher la commande sous Linux (Rechercher des fichiers et des répertoires)

Commandes Nmap avec exemples

Deux commandes pour trouver facilement des fichiers et des répertoires dans Debian 11

comment puis-je supprimer récursivement des répertoires vides dans mon répertoire personnel ?