ディレクトリを作成できましたliterally named ~
。
(どうやら、Pythonのos.mkdir('~/something')
がこれを行います。)
自宅を壊さずに削除するにはどうすればよいですか?
また、それが役立つ場合は、別のパーティションに実際の/home
があります。そして、重複する~
は(real)~
にあります。
~
で\~
をエスケープするか、単一引用符'~'
を使用します。だからあなたはできる
rmdir ~/\~
または
cd ~ ; rmdir '~'
pythonが与えるもの、pythonが奪うもの:
$ python -c 'import os; os.makedirs("~/foo")'; tree; python -c 'import os; os.removedirs("~/foo")'; tree
.
└── ~
└── foo
2 directories, 0 files
.
0 directories, 0 files
os.mkdir
を実行した場合、 os.rmdir
で元に戻すことができます(os.makedirs
とos.removedirs
についても同様です)。
次のようなバックスラッシュを使用してディレクトリ名をエスケープすることができます(削除するディレクトリの親ディレクトリで操作している場合):
rmdir \~
または、ドット付きの相対パスを現在のディレクトリとして使用できます(親ディレクトリにある場合も):
rmdir ./~
または、完全な絶対パスを使用できます。
rmdir /home/USERNAME/~
心配ありません。rmdir
は空のディレクトリのみを削除できます。誤ってコマンドを誤って入力し、パスが実際のホームディレクトリに評価される場合、ファイルが含まれているため危険ではありません。
$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty
find
コマンドはそのような奇跡を起こすことができます。コマンド
ls -i
iノード数のファイルまたはディレクトリが表示されます。次に、find
を使用して、次を使用してそのようなファイルまたはディレクトリを削除できます。
find . -inum <inode-number> -delete #for a file
そして
find . -inum <inode-number> -exec rm -rf {}\; #for directories
最初にhome=os.path.expanduser("~")
を実行し、次にos.path.join(home,"something")
を実行する必要があります。 ~
はpythonではテキストとして扱われ、bash
または他のシェルでのように展開しません。
$ python -c 'import os;home=os.path.expanduser("~"); os.mkdir(os.path.join(home,"something"))'
$ ls -ld ~/something
drwxrwxr-x 2 xieerqi xieerqi 4096 7月 12 21:00 /home/xieerqi/something/
すでに述べた方法に加えて、ASCIIの文字テーブルの~
に16進値を使用できます。これは、実際の~
とは異なり、コマンドラインでユーザーのホームディレクトリに展開されません(ティルダがWordの先頭に表示されると、ユーザーのホームディレクトリに展開されることを不思議に思います。ls ~
とls $'\x7e'
を比較してください。
仕組みは次のとおりです。
# Make the directory
$ mkdir ./~
$ stat ./$'\x7e'
File: './~'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 5768019 Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/ xieerqi) Gid: ( 1000/ xieerqi)
Access: 2017-07-12 21:05:31.382828424 -0600
Modify: 2017-07-12 21:05:31.382828424 -0600
Change: 2017-07-12 21:05:31.382828424 -0600
Birth: -
# and remove it
$ rmdir ./$'\x7e'
$ ls $'\x7e'
ls: cannot access '~': No such file or directory