32

作業ディレクトリ内のいくつかのシンボリック リンクを削除しようとしましたが、いくつかの問題に直面しています。

os.removeリンクの元のフォルダの実際の内容も削除します

os.shutilシンボリック リンクの場合はエラーが発生します。

元のコンテンツを破壊せずに python コマンドを使用してシンボリック リンクを削除する方法はありますか?

ありがとう

4

5 に答える 5

44

os.unlink()私のために働きます。リンク先のディレクトリを削除せずに、シンボリックリンクを削除します。

于 2012-07-28T21:56:30.067 に答える
4

申し訳ありませんが、私は愚かなプログラミングの間違いを犯しました.リンクの代わりにソースを愚かに削除していました.

正解は @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)
于 2012-07-29T10:00:01.357 に答える
2

Python 3.4 以降では、リンクがファイルの場合はunlink().

>>> from pathlib import Path
>>> p = Path('/some/file/')
>>> p.unlink()

パスがディレクトリを指している場合は、代わりに Path.rmdir() を使用してください。

>>> from pathlib import Path
>>> p = Path('/some/dir/')
>>> p.rmdir()
于 2019-02-22T15:48:39.837 に答える
2

ディレクトリ名の末尾にスラッシュが含まれている場合、linuxrmコマンドはリンクをたどってディレクトリを削除しようとします。ディレクトリへのシンボリックリンクを削除するを参照してください。os.remove ドキュメントには、ディレクトリを削除しようとするとエラーが発生すると書かれていますが、OSErrorシンボリックリンクの場合は常にそうなるとは限りません。

于 2012-07-28T11:30:31.337 に答える