Sachant que la ligne de commande est très puissante, j’aimerais supprimer environ 6000 fichiers png d’un dossier et de ses sous dossiers.
Je connais rm qui peut supprimer un fichier ou un dossier mais je ne sais pas comment lui dire d’y faire.
supprime tous les fichiers qui ont l’estention png dans le dossier courant.
rm *.png
si tu veux un truc récursif, c’est un peu plus compliqué. voila comment je ferais :
find . -name *.png | xargs rm
explication :
trouve tous les fichiers qui ont l’extention png dans le dossier courant et ses sous dossiers (tu peux remplacer le . par le chemin que tu souhaite) et les écrit sur la sortie standard (= dans ton terminal)
le | prends la sortie de la commande précedente (qui ne sera pas affichée du coup) et la donne comme entrée à la commande suivante.
xargs rm
xargs est une commande qui appelle la commande passée en paramètre avec tous les arguments passés dans l’entrée standard, donc, pour charque résultat du find précedent, elle va appeller la commande rm (remove)
Non, ça va supprimer les .png du répertoire courant, et récursivement les répertoires se terminant par .png (s’il y en a) qui sont dans le répertoire courant (et donc absolument tout ce que ces répertoires contiennent, pas seulement les .png). Le find est obligatoire ici
faut etre pervers pour avoir des repertoires terminant par .png
et pour etre sur que le find ne liste que les fichiers, il faut rajouter : -type f
donc ca fait (a ma maniere) :
find . -name "*.png" -type f -exec /bin/rm '{}' \;
Hum oui c’est vrai, au temps pour moi (j’ai honte).
Pour me racheter:
l’option exec de find est très bien, mais s’il y a 6000 fichiers, ça va appeler 6000 fois rm.
C’est pareil avec xargs, sauf si on spécifie un paramètre:
find . -name “*.png”|xargs -n 10 /bin/rm
Ca supprimera les fichiers par paquet de 10, en n’appelant donc rm “que” 600 fois.