Wct, assistant pour l’arborescence des ordinateurs.

Je vous présente dans ce topic l'outil en cours de développement smwct.

a marqué ce sujet comme résolu.

Salutation,

Ce sujet consiste en la présentation du projet Smwct qui est open-source sur GitHub. Ce dernier est uniquement développé en python. J’en profite pour vous faire part de l’un des aspects principaux de ce topic : ce projet que je vais vous présenter a besoin d’un coup de main de la part de développeur Python volontaires, car comme je vais vous l’expliquer plus bas, le code qui consiste en l’exploration des répertoires est relativement ardus à concevoir : je n’ai toujours pas réussi à le faire fonctionner.

Présentation

Smwct est l’acronyme de "Search and Moderation Wizard for the Computer Tree", ou "Assistant de Recherche et de Modération pour l’Arborescence des Ordinateurs" en français. Comme son nom l’indique ce projet vise à assister l’humain dans la recherche et la modération de l’arborescence de son ordinateur. Plus précisément, et je le développerai mieux plus bas, celui-ci permet de :

  • Rechercher en partant d’un répertoire près-suggéré au départ une chaîne de caractère fournit également au départ dans les noms des dossiers, sous-dossiers et fichiers rencontrés durant l’exploration des répertoires.
  • Effectuer la recherche expliqué précédemment mais en suggérant de supprimer à la fin de la recherche les fichiers / dossiers trouvés.

Causes

Smwct a été imaginé pour répondre à deux problèmes qui me tracassaient personnellement, en lisant ce qui suit, vous devriez comprendre, si vous êtes programmeur, à quoi vous attendre quant à la participation au projet, que ce soit pour ajouter une fonctionnalité ou pour arranger le code. Reprenons, les causes de Smwct sont les suivantes :

  • Lors de la désinstallation d’un logiciel sur Linux la totalité des fichiers / dossiers ne sont pas supprimé. Il reste très souvent des répertoires associés dans le répertoire du cache et dans les dossiers originaux tels que etc et var. C’est une tâche qui me prend beaucoup de temps et a tendance à m’agacer.
  • L’outil find qui permet en quelques sortes ce que proposera Smwct est très embigü, notamment au niveau de sa syntaxe d’utilisation.

Exemples d’utilisation

La façon d’utiliser Smwct sera la suivante :

# pour rechercher au niveau de la racine (là où on retrouve etc et var par exemple)
python smwct/run.py -s --root mcafee

# pour chercher au niveau de sa session (/home/username)
python smwct/run.py -s --session mcafee

# pour effectuer la recherche à la racine absolue et au niveaud la session
python smwct/run.py -s --anywhere mcafee

Vous pouvez déjà noter que je n’évoque ici aucun moyen de supprimer ce qui a été trouvé : je préfère m’abstenir quant à cette fonctionnalité car elle n’a pas été entamé au niveau du code, à contrario de la recherche qui l’a été (n’est toujours pas fonctionel, mais existe).

Si nous décomposons l’une de ces commandes, 4 morceaux ressortent : python smwct/run.py, -s, --root et mcafee.

Tout d’abord, python smwct/run.py permet de dire à Python de lancer run.py qui se trouve dans smwct/. Vous devez sûrement vous interroger à propos du comment ce répertoire est arrivé là, j’explique simplement comment mettre en place Smwct sur son ordinateur. De plus, vous vous dites peut être que entrer python smwct/run.py à chaque fois pour faire une recherche est pénible, vous avez raison, et c’est l’un des problèmes que j’aimerai qu’on résout avec ceux qui se porteraient volontaire pour participer.

Ensuite on a -s qui signifie "search" et le deuxième drapeau qui apporte une précision en plus : Où commencer la recherche ? Chaque drapeaux correspond au largage à un endroit précis de l’explorateur. --root pour /, --session pour /home/username/ et --anywhere qui regroupe --root et --session. Notez que --anywhere devrait prendre un temps considérable (ne sous estimez pas la quantité d’élément du répertoire /).

Pour finir le dernier argument qui correspond à la chaîne de caractère sur laquelle se base l’explorateur pour ajouter à sa liste de trouvaille. Attention, je dis bien la chaîne de caractère sur laquelle se base l’explorateur, pas la chaîne que va rechercher l’explorateur, voyez cette chaîne comme le motif qu’utilise l’explorateur.

Vous comptez ajouter votre rocher à l’édifice ?

Si vous lisez ceci c’est sûrement parce que le titre qui se trouve au dessus est en accord avec votre intention, alors voilà un mini-mode d’emploi pour commencer à participer (le travail à faire n’est pas aussi conséquent que celui de ce site web, je vous rassure) :

  • Forkez le repository.
  • Clonez le là où vous souhaitez à l’aide de la commande git clone https://github.com/b4-b4/smwct.git.
  • Créez une branche et modifiez y ce qui vous semble juste.
  • Faites une pull request de votre branche, je m’occuperai personnellement de la vérifier (pour l’instant, du moins jusqu’à ce que cette tache me soit trop chronovore, auquel cas je ferai appel à l’un d’entre vous).

Aperçu des taches

Parmi les différentes mission à réaliser, en voici quelques unes :

  • Faire en sorte que python smwct/run.py soit remplacé par un simple appel de smwct, comme git ;
  • Rendre fonctionnel l'explorateur de fichier ;
  • Lorsque la tâche du dessus sera accompli, l’arranger de sorte que l’explorateur suggère à la fin de tout supprimer où bien de sélectionner ceux à supprimer à l’aide d’un index qui apparaîtra à côté du chemin correspondant à la cible (rappelez vous, mcafee par exemple).

Merci d’avoir pris le temps de lire ceci, vous êtes à présent libre de de participer, ou non.

Cordialement, b4b4.

+0 -0

Bonjour, ce projet est intéressant , j’ai vue le repo github, mais quelque remarque:

  • supprimer des fichier sélectionnes, ca tous les OS le fait (enfin les plus connus)
  • il existe le meme outil : grep mais si tu veux faire un outil comme grep ok
  • mcafee est un mauvais example (surtout il est pas tres fiable)
  • attention a faire la difference entre les fs des OS qui changent (notamment windows et linux)
  • faire un executable en python est déconseillé

sinon je prendrais plaisir a contribuer(car j’ai vraiment envie de coder en python) mais je ne garantie pas une longue contribution .

Je regarde le repo et je réponds

+0 -1

Re-bonjour,

supprimer des fichier sélectionnes, ca tous les OS le fait (enfin les plus connus)

Je me suis certainement mal exprimé : mon outil suggérera après la recherche de supprimer les résultats, donc ce n’est pas un outil permettant de supprimer comme on le ferai, c’est couplé à la recherche la suppression.

il existe le meme outil : grep mais si tu veux faire un outil comme grep ok

Je sais, si tu te souviens, j’ai dis que la syntaxe était embigü.

mcafee est un mauvais example (surtout il est pas tres fiable)

En effet, d’où mon inclusion dans l’utilisation de l’outil Smwct : il aide à supprimer ce qui est partout (McAfee est certes un antivirus, mais il se propage et se cache comme un virus dans les répertoires). D’ailleurs, le slogan de Smwct pourrait être "Débarassez vous de McAfee de fond en comble".

faire un executable en python est déconseillé

Tu veux dire que quand je tape git ... j’utilise l’exécutable git ?

+0 -0

oui quand tu tape git tu execute l’executable or en python il n’es pas conseille de faire executable. Bon apres il est vrais qu’on aura besoin de build un executable

autre chose : ce n’est pas grep que je voulais dire c’est find qui fait les choses que fait Smwct mais il est que sur Macos/Linux alors que Smwct va etre sur tous les OS (enfin presque tous ) ;) mais oui. avec une bonne syntax l’outil va etre bien

Moi je suis partant en tous cas ;)

+0 -0

Je t’avoue que je ne suis pas sûr de tout comprendre. Voici quelques remarques en vrac, n’hésite pas à me dire si je passe à côté du truc.

Lors de la désinstallation d’un logiciel sur Linux la totalité des fichiers / dossiers ne sont pas supprimé. Il reste très souvent des répertoires associés dans le répertoire du cache et dans les dossiers originaux tels que etc et var. C’est une tâche qui me prend beaucoup de temps et a tendance à m’agacer.

Quel est le gestionnaire de paquets utilisé par ta distribution ? N’a-t-il pas une option spécialement prévue pour supprimer aussi les fichiers associés (genre apt purge).

L’outil grep qui permet en quelques sortes ce que proposera Smwct est très embigü, notamment au niveau de sa syntaxe d’utilisation.

Peut-être parles-tu plutôt de find plutôt que grep en l’occurrence ? Je ne vois pas en quoi grep se rapproche de Smwct au niveau des fonctionnalités.

Faire en sorte que python smwct/run.py soit remplacé par un simple appel de smwct, comme git ;

Pour une distribution classique (souvent gérée au niveau des paquets), il te faut un fichier Python nommé smwct (sans extension), avec le bon shebang en première ligne et le droit d’exécution pour ses utilisateurs (chmod +x). Enfin, il serait accessible dans un repertoire référencé dans $PATH. Ce fichier smwct implémente le « main » de ton programme (pour le dire ainsi) et appelle ensuite les modules qui font le vrai boulot (sauf cas où le programme est assez court pour tenir dans un unique fichier). Ton fichier run.sh est déjà dans cet esprit (tout le code intéressant étant dans le module src).

Comme d’un système à un autre il peut y avoir des différences sur l’emplacement des modules Python, la bonne commande Python à invoquer dans le shebang (python vs. python3), le lieu où doit résider le fihcier, etc., c’est en général géré en partie par les mainteneurs de paquets qui vont s’assurer que tout est bien au bon endroit et que le code métier (qui peut être sous forme de module(s) Python dans /usr/lib/python3.10/site-packages/mon-programme par exemple) puisse être appelé sans problème depuis un fichier Python qui est par exemple dans /bin.

Je te déconseille cependant de t’amuser à bidouiller toi-même les répertoires du système. Ce que je décris est en principe géré automatiquement par un gestionnaire de paquets qui sait où mettre les choses.

En attendant, tu peux te faire un alias dans ta config comme ceci :

alias smwct="python /path/to/project/smwct/run.py"

et appeler juste smwct pour te simplifier la vie.

+1 -0

L’outil grep qui permet en quelques sortes ce que proposera Smwct est très embigü, notamment au niveau de sa syntaxe d’utilisation.

En quoi c’est ambigu ? C’est un standard « quoi où options ».

+0 -0

En quoi c’est ambigu ?

Rep.@GabbroLorsque : quand je vois des commandes de ce type, find . -name "*.page" -type f -exec wc -c "{}" \+, je n’ai qu’une envie c’est de ne jamais y avoir à faire.

En attendant, tu peux te faire un alias dans ta config comme ceci :

Rep.@sgble : Ou se trouve cette config ?

+0 -0

je vois des commandes de ce type, find . -name "*.page" -type f -exec wc -c "{}" \+, je n’ai qu’une envie c’est de ne jamais y avoir à faire.

On parle bien de find du coup, pas de grep ;)

Rep.@sgble : Ou se trouve cette config ?

b4b4

Si tu utilises Bash, c’est le fichier ~/.bashrc normalement.

+0 -0

En quoi c’est ambigu ?

Rep.@GabbroLorsque : quand je vois des commandes de ce type, find . -name "*.page" -type f -exec wc -c "{}" \+, je n’ai qu’une envie c’est de ne jamais y avoir à faire.

b4b4

xargs. Dans un pipe, ça applique la commande à chaque ligne de la sortie précédante. Exemple du man :

find /tmp -name noyau -type f -print | xargs /bin/rm -f

Chercher les fichiers dont le nom est noyau dans le répertoire /tmp et ses sous-répertoires, et les effacer. Rappelez-vous que vous pouvez rencontrer des problèmes si des noms de fichiers comportent des retours à la ligne ou des espaces.

Dans les cas complexes, une boucle

for i in `find . -name "*.page"`; do echo $i; done

PS : j’ai fait du bash en pro pendant 3 ans. J’ai quelques facilités pour bidouiller des commandes standards pour ce genre de choses.

+0 -0

Salut,

Je voulais réagir déjà à ces passages concernant le distribution d’un paquet Python :

Tout d’abord, python smwct/run.py permet de dire à Python de lancer run.py qui se trouve dans smwct/. Vous devez sûrement vous interroger à propos du comment ce répertoire est arrivé là, j’explique simplement comment mettre en place Smwct sur son ordinateur. De plus, vous vous dites peut être que entrer python smwct/run.py à chaque fois pour faire une recherche est pénible, vous avez raison, et c’est l’un des problèmes que j’aimerai qu’on résout avec ceux qui se porteraient volontaire pour participer.

et

Pour une distribution classique (souvent gérée au niveau des paquets), il te faut un fichier Python nommé smwct (sans extension), avec le bon shebang en première ligne et le droit d’exécution pour ses utilisateurs (chmod +x). Enfin, il serait accessible dans un repertoire référencé dans $PATH. Ce fichier smwct implémente le « main » de ton programme (pour le dire ainsi) et appelle ensuite les modules qui font le vrai boulot (sauf cas où le programme est assez court pour tenir dans un unique fichier). Ton fichier run.sh est déjà dans cet esprit (tout le code intéressant étant dans le module src).

et

faire un executable en python est déconseillé

Tu peux oublier ces trois façons de procéder, il y a une façon standard de distribuer des paquets Python et de construire des points d’entrée qui te donne des exécutables avec des noms arbitraires (genre pip par exemple !). Il faut faire un paquet, ce qui de nos jours veut dans la vaste majorité des cas juste dire écrire le pyproject.toml qui va bien, et ton paquet sera installable via pip comme n’importe quel autre paquet Python standard. Les points d’entrées que tu as déclarés sont mis usuellement dans ~/.local/bin qu’il suffit d’avoir dans son PATH.


J’ai du mal à comprendre la différence entre --root et --anywhere étant donné que /home/$USER est déjà dans /. Par ailleurs --session est un peu étrange, le nom communément utilisé est plutôt --home.


Lors de la désinstallation d’un logiciel sur Linux la totalité des fichiers / dossiers ne sont pas supprimé. Il reste très souvent des répertoires associés dans le répertoire du cache et dans les dossiers originaux tels que etc et var. C’est une tâche qui me prend beaucoup de temps et a tendance à m’agacer

Comme disait @sgble, c’est le boulot de ton gestionnaire de paquets.


Par ailleurs, il va être extrêmement difficile de concurrencer find sur ce créneau, il est le standard de facto et très rapide… Pouvoir rivaliser sérieusement avec find (l’UI est effectivement pas folichonne) est un travail titanesque. Il y a fd qui est une tentative sérieuse, je sais pas ce que ça vaut mais ça peut t’intéresser pour résoudre ton problème.

En tout cas, pour t’améliorer en Python et en programmation, c’est un excellent projet, donc bon courage!

+1 -0

Merci pour cette excellente réponse @Adri1,

Il faut faire un paquet, ce qui de nos jours veut dans la vaste majorité des cas juste dire écrire le pyproject.toml

En créant le paquet, je m’assure que je vais pouvoir accéder depuis n’importe où à mon smwct/run.py ?

Comme disait @sgble, c’est le boulot de ton gestionnaire de paquets.

C’est du moins ce qu’est censé faire mon gestionnaire de paquet : ces derniers font sûrement quelque chose, mais certainement pas supprimer tout ce qui est en rapport avec le logiciel, je dis ça pas expérimentation.

Par ailleurs, il va être extrêmement difficile de concurrencer find sur ce créneau

Je n’ai jamais pensé être en concurrence avec qui que ce soit, smwct devait même à l’origine rester quelque part sur mon ordinateur pour mon usage personnel. Toutefois, maintenant que tu l’as dis, smwct auras au moins l’atout d’être facilement utilisable.

Cordialement.

+0 -0

En créant le paquet, je m’assure que je vais pouvoir accéder depuis n’importe où à mon smwct/run.py ?

Ouais. En pratique, tu vas avoir un pyproject.toml qui contient ça (voir la doc que j’ai pointée pour plus d’options) :

[build-system]
requires = ["setuptools>=61"]
build-backend = "setuptools.build_meta"

[project]
name = "smwct"
version = "0.1.0"
requires-python = ">=3.8"

[project.scripts]
smwct = "smwct.cli:run"

[tool.setuptools.packages.find]
where = ["src"]
include = ["smwct"]
namespaces = false

Et ça donne ça :

Capture d'écran
Capture d’écran
+0 -0

J’ai regardé un peu ton code et la fonction get_username m’a surpris : elle se base sur le répertoire courant pour identifier l’utilisateur, mais c’est une méthode qui n’est pas vraiment fiable (le répertoire courant peut-être n’importe quoi d’autre que le home ou l’un des répertoires qui en descend).

Il existe d’autres méthodes (os.getlogin par exemple) pour identifier l’utilisateur courant.

Aussi en parlant de répertoire courant : ton programme ne permet pas de faire une recherche à partir de ce répertoire ?

Bonsoir @entwanne (je n’ai pas encore toutes les bonnes pratiques, mais dois je mentionner celui à qui je répond ?),

En effet, je n’y avais pas songé et c’est assez problématique. Je vais me documenter à propos de os.getlogin().

Aussi en parlant de répertoire courant : ton programme ne permet pas de faire une recherche à partir de ce répertoire ?

Pour l’instant, mon but était de mettre le moins de fonctionnalités possible pour développer l'explorateur de fichier que je peine vraiment à concevoir. Ça a de forte chance d’être ajouté par la suite.

+0 -0

Pour l’instant, mon but était de mettre le moins de fonctionnalités possible pour développer l'explorateur de fichier que je peine vraiment à concevoir. Ça a de forte chance d’être ajouté par la suite.

b4b4

J’aurais alors dit que justement si tu cherches à limiter le nombre de fonctionnalités, le plus simple est de ne gérer que le répertoire courant. C’est ainsi à l’utilisateur de se placer dans le répertoire qui l’intéresse avant de lancer la recherche.

C’est ainsi à l’utilisateur de se placer dans le répertoire qui l’intéresse avant de lancer la recherche.

On revient un peu au problème d’origine à savoir que c’est pénible de chercher un élément dans une myriade de répertoire, alors, avec --root ou --session ça effectue le trie dans les deux seuls endroits où peuvent se cacher les éléments recherchés.

+0 -0

D’un autre côté, avec le répertoire courant, ça évite de chercher dans des endroits où tu sais qu’il n’est pas et surtout où il peut y avoir des faux positifs. Par exemple, chercher dans .local.

Après, la fonction ne devrait vraiment pas être difficile à mettre en place. Sans argument de lieu de recherche, il suffit de récupérer le répertoire courant, ce qui est littéralement une ligne de code, si je ne me trompe pas.

Pourquoi avoir choisi de mettre ce paramètre en option plutôt que de mettre le chemin vers le dossier comme paramètre (/home/user/.local, par exemple), qui est l’usage habituel de ce genre de commandes ?

+0 -0

Parce que je n’ai pas imaginé Smwct comme un outils qui fouille le dossier de son choix. Il y a de fortes chances que je l’ajoute, mais comme je l’ai dis, ce projet a été conçu uniquement pour trouver rapidement et simplement tous les éléments contenant une certaine chaîne de caractère dans une large game de répertoire.

+0 -0

Le cas d’usage sembler en effet exister, j’ai l’impression que c’est un peu ce que fait la commande whereis qui cherche dans des répertoires stratégiques, mais à condition qu’on ait un pattern exact à lui donner.

Par exemple :

% whereis ffmpeg
ffmpeg: /usr/bin/ffmpeg /usr/include/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz

Il trouve le programme, les libs source, les pages du manuel, … Mais le tien a l’air plus général.

+0 -1
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte