Je me demandais s'il y avait un moyen d'afficher une sorte d'informations de progression lors de la recherche de fichiers sous Linux en utilisant find
. Je me surprends souvent à la recherche de fichiers sur un grand disque et une sorte d'indicateur de progression serait très utile, comme un bar ou au moins le répertoire courant « trouver » des recherches dans. Y a-t- il des scripts qui font cela, ou ne prendre en find
charge certains crochets ?
24
Réponses:
avec cette astuce, vous pouvez voir le dossier actuel - mais pas de barre de progression - désolé.
la source
Un petit utilitaire appelé pv (pipe viewer) peut vous aider. Extrait du fantastique résumé de Peteris Krumins:
La visionneuse de tuyaux est un outil basé sur un terminal pour surveiller la progression des données à travers un pipeline.
Vous pouvez utiliser pv de plusieurs façons. Lorsque je joue ici, je le mets immédiatement après un tuyau pour surveiller la progression de la sortie générée par find (devrait passer stdin à stdout sans toucher)
qui affichera la sortie un peu comme ceci:
(J'ai redirigé stdout vers / dev / null pour que je puisse voir la barre de progression en action sans que la sortie ne passe. Ce n'est probablement pas votre intention avec find, alors adaptez-vous en conséquence)
Honnêtement, je ne sais pas si cela fonctionne bien dans la nature. Pour les trouvailles "chères" comme celle ci-dessus (traversant depuis la racine), cela semblait fonctionner assez bien. Pour des commandes plus simples dans un nœud plus profond de l'arborescence de répertoires, pv a lamentablement échoué. Ces commandes retournent immédiatement des résultats, donc une barre de progression est probablement sans objet ici.
Quoi qu'il en soit, jouez et voyez si cela fonctionne du tout pour ce dont vous avez besoin. Matière à réflexion, au moins.
la source
find
, nipv
savoir combien de temps la recherche prendra, donc ils ne peuvent pas calculer le pourcentage. Tout ce que nous pouvons voir dans lapv
sortie est le temps écoulé depuis le début de la recherche.yes | pv > /dev/null
d'observerJ'ai cherché cela aujourd'hui et suis arrivé ici via Google. J'ai eu une découverte de longue date sous OS X et, apparemment,
watch
n'existe pas là-bas. Voici donc une autre solution:lsof -Fn -a -c find -d cwd +r 10
lsof
= liste des fichiers ouverts-Fn
= juste montrer le nom du fichier / répertoire (préfixé avec le caractère 'n', sautez ceci si vous préférez lalsof
sortie complète-a
= indiquelsof
d'afficher uniquement les lignes correspondant à tous les critères (par défaut, il affiche les lignes correspondant à tous les critères)-c find
= affiche les fichiers / répertoires ouverts par le processus nomméfind
(en fait, le processus dont le nom commence parfind
, mais il est sensible à la casse etFinder
ne s'affichera donc pas)-d cwd
= afficher les lignes avec FD (filedescriptor) cwd (répertoire de travail actuel)+r 10
= afficher la sortie toutes les 10 secondes jusqu'à ce qu'aucun fichier ouvert ne soit trouvé (la recherche est terminée)Cela montrera que le répertoire
find
est en cours de traitement toutes les 10 secondes, il devrait donc donner une idée s'ilfind
fonctionne toujours et dans quelle mesure il a progressé.la source
Il existe un exemple de recherches parallèles avec
find
inman find
. En l'utilisant, vous pouvez effectuer plusieurs vérifications pour chaque élément, effectuer plusieurs actions selon la condition qui fonctionne. La première vérification peut être, par exemple, simple-print
, donc tous les noms sont imprimés sur stdout. La deuxième vérification fera ce que vous voulez. Quelque chose comme:find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec rm {} \; \)
Si la deuxième vérification doit également afficher les noms de fichiers, vous pouvez rediriger l'un d'entre eux vers stderr en utilisant
-fprint /dev/stderr
.la source
AFAIK, ce n'est pas le cas, et sa mise en œuvre ne serait pas anodine.
... Hmm. Peut-être un script s'exécutant en
find <target dir> -type d
premier, stockant la liste puis faisant écho à chaque dir avant d'exécuter unfind <list item> -maxdepth 1 <rest of find parameters>
dans une boucle for.Notez que vous échangez une perte de performance / significative / en échange de pouvoir voir vaguement ce qu'il fait.
la source
Ceci est une liste des fichiers actuels ouverts par find , donc c'est la même chose que ce que cherche "en ce moment".
Son adresse de requête légère et juste des descriptifs de fichiers utilisés par find chaque seconde et n'interfère pas avec find lui-même. Vous pouvez également le faire avec n'importe quel programme que vous souhaitez.
Il
grep -v /dev/
s'agit de masquer les fichiers STDOUT, STDIN et STDERR, qui sont des fichiers utilisés pour recevoir et imprimer des données sur votre console.la source