J'ai essayé de supprimer certains liens symboliques dans mon répertoire de travail, mais je rencontre des problèmes.
os.remove
supprime également le contenu réel du dossier d'origine du lien
os.shutil
renvoie une erreur en cas de liens symboliques.
Existe-t-il un moyen de supprimer un lien symbolique en utilisant les commandes python sans détruire le contenu d'origine?
Merci
os.unlink()
fonctionne pour moi. Il supprime le lien symbolique sans supprimer le répertoire auquel il renvoie.
La réponse acceptée ne fonctionne pas sous Windows avec des liens créés via mklink /D
. Si tel est votre problème, la réponse a été publiée dans cette question: Supprimer le lien symbolique vers le répertoire sous Windows
Le code suivant devrait fonctionner sur les deux systèmes:
if(os.path.isdir(targetLink)):
os.rmdir(targetLink)
else:
os.unlink(targetLink)
Si le nom du répertoire contient une barre oblique de fin, la commande linux rm
suivra le lien et essaiera de supprimer le répertoire. Voir Supprimer un lien symbolique vers un répertoire . Le os.remove
documentation indique qu'il vous donnera un OSError
si vous essayez de supprimer un répertoire mais peut-être que cela ne se produit pas toujours dans le cas des liens symboliques.
Désolé, mon mauvais, j'avais fait une stupide erreur de programmation: je supprimais bêtement la source au lieu des liens.
La bonne réponse est par @samfrances.
os.unlink
fait l'affaire.
En plus de cela, voici quelques autres conseils si vous souhaitez effacer un répertoire en utilisant python:
Certainement pas threadsafe, mais vous avez l'idée ...
def rm(obj):
if os.path.exists(obj):
if os.path.isdir(obj):
if os.path.islink(obj):
os.unlink(obj)
else:
shutil.rmtree(obj)
else:
if os.path.islink(obj):
os.unlink(obj)
else:
os.remove(obj)
dans Python 3.4 et supérieur, si le lien est un fichier, utilisez unlink()
.
>>> from pathlib import Path
>>> p = Path('/some/file/')
>>> p.unlink()
Si le chemin pointe vers un répertoire, utilisez plutôt Path.rmdir ().
>>> from pathlib import Path
>>> p = Path('/some/dir/')
>>> p.rmdir()