Bonjour,
sous Ubuntu, j'ai des fichiers ou répertoires dont le nom a des caractères interdits comme '?' que je voudrais supprimer.
Mais listdir par exemple ne les contient même pas.
Comment faire ?
Merci pour votre aide
Bonjour,
sous Ubuntu, j'ai des fichiers ou répertoires dont le nom a des caractères interdits comme '?' que je voudrais supprimer.
Mais listdir par exemple ne les contient même pas.
Comment faire ?
Merci pour votre aide
Bonjour,
J'adore python mais perso pour ce type de tache j'utilise le terminal.
t'effacera tous les fichiers et répertoires contenant un '?' situés dans le répertoire actuel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part rm -R *\?*
Edit: omission du '\' devant le '?'...
Salut,
Une RegEx peut le faire aussi.
Si tu tiens à rester sur du python regarde aussi le module glob ou la méthode glob() de pathlib(si tu l'utilises)...
merci pour toutes ces réponses.
Une précision : je ne veux effacer que le "?", pas le fichier.
Bonne soirée
Dans les grandes lignes:
Tu peux renommer les fichiers trouvés par exemple avec une compréhension de liste [nom for nom in resultats if '?' in nom] avec le nom du fichier auquel tu appliques replace('?', ''). Pathlib est fait pour manipuler les noms de fichier , c'est la bonne occasion d'apprendre à l'utiliser si tu ne l'utilises pas encore ... si tu galères, montre-nous.
édit: correction
suite...
Avec os.walk, les fichiers avec "?" dans le nom apparaissent.
Par contre, je ne vois pas trop comment glob peut aider.
Bonne soirée
dans le shell, le ? est un caractère spécial (glob). Il signifie "un caractère quelconque".
pour trouver un fichier dont le nom contient un ?, il faut protéger ce ? pour qu'il perde sa signification :
Code sh : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3$ printf '%s\n' /tmp/*\?* foo?bar $
Hello,
@Hominidé,
J'ai tendance à dire que python évite de devoir réécrire en batch un code bash si on veut que ça fonctionne sous Windows, la portabilité n'est pas toujours la première pensée...J'adore python mais perso pour ce type de tache j'utilise le terminal.
Pour la commande, j'avoue que le 1er Post du PO n'est pas clair et que ça peut porter à confusion. Preuve que poser la problématique de manière claire c'est important !
@jam7575,
Eh oui, 5h de perdu...Une précision : je ne veux effacer que le "?", pas le fichier.
En validant le choix python, un nom de fichier reste une chaîne de caractères. Vous avez plusieurs possibilités pour "modifier" une chaîne de caractères et des modules qui vous permettront de modifier un fichier comme vous le souhaiteriez.j'ai des fichiers ou répertoires dont le nom a des caractères interdits comme '?' que je voudrais supprimer
Je ne crois pas avoir vu un début de code de votre part, alors que ce genre d'exercice est très courant dans les tutoriels.
Bonjour
Chez moi aussi j'ai testé, créé un fichier "xxx?" et os.listdir l'affiche parfaitement. C'est d'ailleurs tout à fait compréhensible vu que le caractère "?" (qui, contrairement à ce qui est écrit dans le titre du topic, n'est pas un caractère "interdit" mais un caractère "spécial" et "spécial" parce qu'interprété) est interprété par le shell et pas par Python. Et même en shell il est interprété à l'entrée, pas à la sortie => un "ls" ou autre affichera parfaitement les "?" présents dans le nom du fichier.
Pour le reste tout à été dit. Et moi aussi, sauf s'il y a des contraintes non dites ici (portabilité, intégration, etc), je conseillerais le shell plutôt approprié pour ce genre de travail.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Bonjour.
mon Kdo de Noël :
Avec la commande rename (à installer si nécessaire: sudo apt install rename)
depuis le répertoire concerné:
La commande est une simulation, tu peux donc l'exécuter sans risque . Si cela te convient tu enlèves l'option -n pour que la commande renomme réellement tes fichiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part rename -n 's/\?//g' ./*
La commande va chercher tous les fichiers contenant un ou plusieurs '?' du répertoire en cours, et les renomme sans le ou les '?'
Merci,
je connais rename en effet,mais je cherchais (ce qui marche avec walk) à identifier les fichiers avec "?", avant de les renommer.
Bonnes fêtes
Partager