作業ディレクトリのシンボリックリンクを削除しようとしましたが、いくつかの問題に直面しています。Pythonでシンボリックリンクを削除するには?
os.remove
も
os.shutil
がシンボリックリンクの場合にエラーをスローリンクの元のフォルダの実際の内容を削除します。
元のコンテンツを破壊することなく、Pythonコマンドを使ってシンボリックリンクを削除する方法はありますか?ディレクトリ名の末尾にスラッシュが含まれている場合
おかげ
作業ディレクトリのシンボリックリンクを削除しようとしましたが、いくつかの問題に直面しています。Pythonでシンボリックリンクを削除するには?
os.remove
も
os.shutil
がシンボリックリンクの場合にエラーをスローリンクの元のフォルダの実際の内容を削除します。
元のコンテンツを破壊することなく、Pythonコマンドを使ってシンボリックリンクを削除する方法はありますか?ディレクトリ名の末尾にスラッシュが含まれている場合
おかげ
は、Linuxのrm
コマンドは、リンクをたどるとディレクトリを削除しようとします。 Remove a symlink to a directoryを参照してください。 os.remove
documentationは、ディレクトリを削除しようとするとOSError
と表示されますが、シンボリックリンクの場合は常にそうであるとは限りません。
OSError:[Errno 1] Operationは許可されていません: 'test /' 'です。おそらくそれは実装に依存します。 –
私は便利なPythonを持っていません。私はこれが推測だと言っていたはずです。私は答えを編集しました。 –
@JohnWattsあなたの答えは本当ですが、これはシェルによって作成されたシンボリックリンクに対してのみ当てはまります。 'os.symlink'で作成されたシンボリックリンクでも同じ問題が発生する – akshayc11
申し訳ありませんが、私のバッドは、私は愚かなプログラミングミスを犯しました。私はリンクの代わりにソースを愚かに削除していました。
正解は@samfrancesです。
os.unlink
です。これに加えて
、あなたのpython使用してディレクトリをクリアしたい場合は、ここでいくつかの他のヒント:
確かにスレッドセーフではないが、あなたのアイデアを得る...
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)
は 'if os.path.exists(obj)'を実行し、 'if os.path.islink'なら' if os.path.isdir'を実行します。あなたはos.unlinkを2回持つ必要はありません。 – QxQ
受け入れ答えはありませんmklink /D
で作成されたリンクのあるWindowsでは動作しません。それはあなたの問題であれば答えはこの質問に掲載されていますDelete Symlink to directory on Windows
次のコードは、両方のシステム上で動作するはずです:
if(os.path.isdir(targetLink)):
os.rmdir(targetLink)
else:
os.unlink(targetLink)
奇妙な、 'os.remove()'のために、元のファイルを削除しません。 Python 2.7.2と3.1.4で試したシンボリックリンクのみです。 –
私のシステム(Python 2.7.1)でも元のファイルも削除されません –
シンボリックリンクをシンボリックに見てみましょう:http://stackoverflow.com/a/12678252/110118 (注:shutil.rmtreeは削除に失敗しますパスはos.path.osdir()にもかかわらず、パスはディレクトリに関係しています) – mlvljr