Solution 1 :
avec cette astuce, vous pouvez voir le dossier actuel - mais pas de barre de progression - désolé.
watch readlink -f /proc/$(pidof find)/cwd
Solution 2 :
Un petit utilitaire appelé pv (lecteur de tubes) peut aider. Extrait du fantastique résumé de Peteris Krumins :
Pipe Viewer est un outil basé sur un terminal permettant de surveiller la progression des données dans un pipeline.
Vous pouvez utiliser pv de plusieurs façons. Lorsque je joue ici, je le mets immédiatement après un tube pour surveiller la progression de la sortie générée par find (devrait passer stdin à stdout intact)
find / -mtime -1h | pv > /dev/null
qui affichera une sortie un peu comme ceci :
6.42MB 0:01:25 [31.7kB/s] [ <=> ]
(J'ai redirigé stdout vers /dev/null afin que je puisse voir la barre de progression en action sans que la sortie ne s'envole. 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 "coûteuses" comme celle ci-dessus (traversant de la racine), cela a semblé fonctionner assez bien. Pour les commandes plus simples dans un nœud plus profond de l'arborescence des répertoires, pv échouait lamentablement. Ces commandes renvoient des résultats immédiatement, donc une barre de progression est probablement inutile ici.
Dans tous les cas, jouez et voyez si cela fonctionne du tout pour ce dont vous avez besoin. Matière à réflexion, au moins.
Solution 3 :
J'ai cherché cela aujourd'hui et je suis arrivé ici via Google. J'ai eu une recherche 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
=affiche simplement le nom du fichier/répertoire (préfixé par le caractère 'n', ignorez ceci si vous préférez lelsof
complet sortie-a
=direlsof
pour afficher uniquement les lignes correspondant à toutes critères (par défaut, il affiche les lignes correspondant à tout critères)-c find
=afficher les fichiers/répertoires ouverts par le processus nomméfind
(en fait, processus dont le nom commence parfind
, mais il est sensible à la casse doncFinder
ne s'affichera pas)-d cwd
=afficher les lignes avec FD (filedescriptor) cwd (répertoire de travail courant)+r 10
=afficher la sortie toutes les 10 secondes jusqu'à ce qu'aucun fichier ouvert ne soit trouvé (la recherche est terminée)
Cela affichera le répertoire find
est traité toutes les 10 secondes, il devrait donc donner une idée si find
fonctionne toujours et dans quelle mesure il a progressé.
Solution 4 :
Il y a un exemple de recherches parallèles avec find
en man find
. En l'utilisant, vous pouvez effectuer plusieurs vérifications pour chaque élément, en effectuant plusieurs actions en fonction de 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
.
Solution 5 :
AFAIK, ce n'est pas le cas, et sa mise en œuvre ne serait pas triviale.
... Hmm. Peut-être un script exécutant find <target dir> -type d
d'abord, stocker la liste puis faire écho à chaque répertoire avant d'exécuter un find <list item> -maxdepth 1 <rest of find parameters>
dans une boucle for.
Notez que vous échangez une perte /significative/ de performance en échange de pouvoir voir vaguement ce qu'il fait.