Générateur de commande find
Construis une commande find Linux depuis des menus déroulants : path, nom, type, taille, âge et une action, expliqués en direct.
Ce générateur de commande find construit ton expression find Linux à partir de menus déroulants, pour t'éviter de fouiller dans le man. Tu indiques où chercher, quel nom matcher, le type, éventuellement une taille ou un âge limite, puis ce qu'il faut faire de ce que ça attrape. La commande se réécrit toute seule pendant que tu avances, et chaque flag reçoit son explication d'une ligne pour que tu comprennes vraiment ce que tu vas lancer. À la seconde où tu touches à quelque chose de destructeur comme -delete, un avertissement rouge s'allume, parce que supprimer dans le mauvais répertoire est une façon classique de perdre des données. Six préréglages couvrent les tâches que je sors le plus souvent, des gros fichiers au nettoyage des vieux logs. Rien ne sort de ton navigateur.
100% dans votre navigateur. Rien de ce que vous tapez ne quitte cette page.
générateur de commande find
Dès que la pression monte, j'ai un trou sur la syntaxe exacte de find. À chaque fois. Du coup j'ai bricolé ça pour me passer du man. Tu indiques où chercher, quel nom matcher, le type, éventuellement une taille ou un âge limite. Puis ce qu'il faut faire de ce que ça attrape. La commande se réécrit toute seule pendant que tu bidouilles, chaque flag reçoit sa petite explication d'une ligne, et à la seconde où tu touches à un truc qui mord comme -delete, un avertissement rouge s'allume. Rien ne sort de ton navigateur.
Ce que fait ce générateur de commande find
Ce générateur de commande find construit ton expression find Linux à partir de menus déroulants, pour t'éviter de fouiller dans le man. find descend dans une arborescence de répertoires, confronte chaque entrée aux règles que tu lui passes, puis fait quelque chose de ce qui correspond. Je dirais que c'est la commande la plus utile de la machine, au moins pour retrouver des fichiers par nom, par taille ou par âge et agir sur chaque résultat. Voilà ce qui coince pour tout le monde. Ce n'est pas basé sur des flags comme la plupart des outils. C'est une expression, qui se lit de gauche à droite, avec l'action collée à la fin. Donc tu remplis des menus déroulants et l'outil assemble cette expression dans le bon ordre.
Prends find . -type f -name "*.log" -mtime +30 -delete. Lis-le à voix haute. Pars de ce répertoire-ci, et pour chaque fichier ordinaire qui finit en .log auquel personne n'a touché depuis plus de 30 jours, supprime-le. Tout ce qui précède ce dernier mot est un test. -delete est l'action. Et comme un seul passage peut effacer ou lancer une commande sur des milliers de fichiers, tu n'as pas le droit d'être négligent avec l'expression.
Comment les critères de find se combinent
- Le path vient en premier. Il dit où commencer à creuser. Je m'appuie sur
.pour là où je me trouve, ou un chemin absolu comme/var/logquand je veux vraiment être sûr. - -maxdepth N limite la profondeur de récursion. C'est une option globale, ce qui veut dire qu'elle doit se placer avant les tests, sinon GNU find râle.
- -name / -iname matchent le nom de fichier contre un glob du shell. Mets le motif entre guillemets. Toujours. Oublie les guillemets et le shell développe le motif avant que
findne le voie, et là tu te demandes pourquoi rien ne correspond. - -type restreint aux fichiers simples (
f), aux répertoires (d) ou aux liens symboliques (l). - -size veut un
+pour plus gros ou un-pour plus petit, rien pour une correspondance exacte, plus une unité (k,M,G, oucpour des octets bruts). - -mtime / -mmin filtrent selon l'ancienneté du dernier changement, en jours ou en minutes.
+7veut dire plus vieux que sept,-1veut dire dans la dernière. Les signes me piègent encore, alors l'outil te le réénonce en clair.
Actions : print, delete et exec
Laissé tranquille, find se contente d'afficher ce qu'il a matché. C'est comme ça qu'il faut commencer. C'est un aperçu gratuit de ce que tes tests sélectionnent vraiment, sans aucun dégât. Mets -ls à la place et tu obtiens une ligne détaillée façon ls -l par résultat. Et puis il y a -delete, qui supprime les correspondances sans annulation possible, donc je t'en supplie : lance d'abord exactement la même commande sans, et lis la liste. Et -exec lance la commande de ton choix sur chaque résultat, avec qui remplace le chemin du fichier. Termine-la par + au lieu de \; et find entasse autant de fichiers que possible dans un seul appel. Bien plus rapide que de lancer un nouveau processus par fichier.
Sécurité : prévisualise avant de supprimer
S'il ne fallait retenir qu'une chose de cette page : prévisualise d'abord. Lance toute la commande avec un simple print, lis vraiment la liste qu'elle te crache, et seulement après ajoute -delete ou -exec rm. J'ai vu un seul chemin mal tapé dévorer bien plus que ce que quiconque avait prévu. Mauvais après-midi. L'avertissement rouge ici se déclenche dès que tu choisis une action destructrice, parce que -delete qui se balade dans le mauvais répertoire est une façon vraiment classique de perdre des données, et je préfère t'embêter que laisser ça arriver.
Confidentialité et fonctionnement de l'outil
Ce n'est que du JavaScript qui tourne dans ton navigateur. Tes chemins et tes motifs ne touchent jamais mon serveur, et je ne logue strictement rien. Une fois la page chargée, ça marche même sans wifi, si jamais tu veux une preuve.
Questions fréquentes
Comment trouver des fichiers par nom sous Linux ?
find . -type f -name "*.txt" te donne tous les fichiers ordinaires qui finissent en .txt sous l'endroit où tu es. Tu te fiches de la casse ? Remplace -name par -iname. Et mets ce motif entre guillemets. Oublie les guillemets et le shell développe le glob d'abord, puis tend à find quelque chose qu'il n'attendait pas du tout.
Comment trouver les gros fichiers ?
Le disque se remplit, voici mon premier réflexe : find / -type f -size +100M fait remonter tout ce qui dépasse 100 mégaoctets, n'importe où sur la machine. Pousse l'unité à G si tu chasses des monstres en gigaoctets. En général je rajoute -exec du -h avec un plus de fermeture et je pipe vers sort pour que les tailles réelles s'alignent quelque part où je peux les lire.
Comment trouver et supprimer les fichiers de plus de 30 jours ?
find /path -type f -mtime +30 -delete fait le boulot. Mais lance-le une fois sans -delete d'abord, regarde bien ce qui revient, et seulement après mets le flag. Je ne vais pas arrêter de le répéter. Si c'est du nettoyage de logs en continu, laisse logrotate s'en charger. find est le bon outil pour les coups ponctuels du genre vide-moi ça aujourd'hui.
Quelle est la différence entre -exec une fois par fichier et une fois par lot ?
Les deux lancent une commande sur tes résultats, juste différemment. Un point-virgule final la lance une fois par fichier. Tout simple, et atrocement lent dès que tu en as quelques milliers. Un plus final bourre autant de fichiers que possible dans une seule invocation, ce qui est radicalement plus rapide et celui que je prends par défaut chaque fois que la commande peut avaler plusieurs arguments d'un coup.
Pourquoi -maxdepth doit-il venir avant les autres tests ?
Parce que -maxdepth n'est pas du tout un test par fichier. Il change la façon dont tout le parcours se comporte. Colle-le après un test et GNU find te préviendra carrément, vu que la position laisse croire qu'il ne s'active qu'à partir de là, ce qui n'est pas le cas. L'endroit sûr est juste après le path. C'est là que l'outil le dépose pour toi, sans avoir à y penser.