Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 26/10/2023, à 18:32

bubu75

Re : [RÉSOLU]Cherche commande pour supprimer des fichiers par leur mimetype

Si j'ai compris c'est cette commande (?):

shopt -s globstar; file -00 --mime-type ./**/* | perl -0lne '$file = $_; chomp($type = <>);
              print $file if $type =~ m{^image/(webp|jpeg)\z}' |
  xargs -r0 echo rm

Elle voit bien toute l'arborescence ça marche.

Dossier 2600 fichiers (sans sous-dossier): 2:07 (StackExchange mettait 2:05).
Dossier 6500 fichiers (avec sous-sous-etc-dossiers): 2:16 (SE: 2:07).
Pas de grande différence, mais qui sait, peut-être en modifiant un peu la commande ça aurait été améliorable...
MAIS!
De toute façon, en essayant sur mon /home (172 000 éléments), zut ça va plus, le Terminal dit

bash: /usr/bin/file: Argument list too long

(SE le fait, en ~30 minutes). Je me souviens que lors de mes essais de l'époque (ceux qui m'avaient pris 5 ou 10 heures de ma vie) je recevais cette réponse aussi au début avec mes premières commandes, jusqu'à ce que trouve "find" qui ne tombe jamais sur cet os on dirait.

*
Histoire de, j'ai essayé de trouver à combien était la limite du nombre de fichiers ou d'éléments, j'ai un dossier à 10 000 éléments qui fonctionnait, mais un autre à 33 000 donnait "Argument list too long", la limite est peut-être entre les 2, peut-être aussi ce n'est pas une question de nombre de fichiers (ou d'éléments ou répertoires), mais de profondeur de niveaux, mais j'ai eu un peu la flemme ou plutôt manque de temps pour tester ou chercher sur internet, surtout que ça ne change pas grand-chose à la question je crains.

Hors ligne

#27 Le 26/10/2023, à 20:26

Watael

Re : [RÉSOLU]Cherche commande pour supprimer des fichiers par leur mimetype

je me souviens, peut-être à tort, que "Agument list too long" fait référence au nombre de caractères de la liste d'arguments, et pas aux nombres de ses éléments.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#28 Le 27/10/2023, à 23:16

bubu75

Re : [RÉSOLU]Cherche commande pour supprimer des fichiers par leur mimetype

Ah oui, comme je ne suis pas trop familier avec le terme "argument", je n'avais pas tilté que c'est un terme qui désigne un élément de commande, comme "option" ou "paramètre".
En effet, en ayant lu (un peu vite fait), surtout cette page de StackOverflow, si j'ai un peu compris, pour une telle commande, avant même de l'appliquer, le système la développe en reprenant chaque élément visé, et donc selon le nombre d'éléments, et en même temps le nombre de caractères de leurs noms (une combinaison des 2 peut-on dire), on peut atteindre la limite autorisée à une commande (ou une "liste d'arguments"?) en poids (équivalente au nombre de caractères je suppose) donnée par le noyau Linux, qui était de 128kB avec le noyau 2.6.23, et "2 097 152" actuellement.

Une solution donnée est d'utiliser "find", mais ça deviendrait une autre commande.

Une autre est d'utiliser une (boucle?) "for" (indiqué dans la 2ème réponse par "Édouard Lopez" encore un Français y sont partout), qui permet de garder un peu la même commande apparemment.
La commande de l'utilisateur qui lui donnait "argument list too long"

rm -f *.pdf

devient

for f in *.pdf; do echo rm "$f"; done

Par contre je ne crois pas pouvoir faire l'adaptation moi-même avec la commande "shopt", est-ce la peine de vous fatiguer à le faire? Peut-être si elle a une chance d'aller 2 fois + vite que celle de SE, sinon bah tant pis smile.

Hors ligne

#29 Le 27/10/2023, à 23:32

Watael

Re : [RÉSOLU]Cherche commande pour supprimer des fichiers par leur mimetype

on peut aboutir au même message d'erreur, parce que le développement sera fait avant l'exécution de la moindre commande.
find est la meilleure alternative.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne