誤って作成された「〜」という名前のディレクトリ(チルダ)


47

文字通りの名前のディレクトリを作成しました~

(どうやら、Python os.mkdir('~/something')がこれを行うようです。)

自宅を壊さずに削除するにはどうすればよいですか?

また、それが役立つ場合/homeは、別のパーティションに実在します。そして、複製~は(実際の)にあり~ます。


51
義務的なXKCD。OK、私はそれが義務であると嘘をついたかもしれません。そしてXKCDであること。
ジェスビンホセ

30
あなたが尋ねなかったPythonの質問に答えるには、将来的にを使用しますos.mkdir(os.path.expanduser('~/something'))
マットノルホフ

8
...好奇心のためだけに、Pythonでディレクトリを作成したので、それos.rmdir('~/something')を削除するつもりはありませんでしたか?
バクリウ

@Bakuriu最終的に、私はそれを理解しました
UniversallyUniqueID

回答:


73

~withをエスケープする\~か、単一引用符を使用します'~'。だからあなたはできる

rmdir ~/\~

または

cd ~ ; rmdir '~'

43
すべきではないものを削除することが心配な場合は、まずmv '〜' normalnameのような非破壊的なことをしてから、ディレクトリnormalnameを削除できます。
クリスジェファーソン

53
rmdir非破壊的です。rmdir空のディレクトリのみを削除します。そのため、rmdirディレクトリに何も含まれていないディレクトリを使用しようとすると、rmdir削除は拒否されます。
Hitechcomputergeek

3
これらのコマンドの最初でチルダをエスケープする必要さえありません- ~シェルの「単語」の先頭でのみ特別に展開されます。
ヘニングマックホルム

1
でもできrmdir *ます。空のディレクトリを削除するだけなので、破壊的なことをすることを心配する必要はありません。
ベヌバード

@ChrisJefferson:最初にコマンドを確認する場合は、使用ls -dして、目的のディレクトリまたはファイルがリストされているかどうかを確認します。のような効果を持つものは必要ありませんmv
ピーターコーデス

42

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.mkdiros.rmdir(および同様にos.makedirsandでos.removedirs)元に戻すことができます。


36

次のようなバックスラッシュを使用してディレクトリ名をエスケープすることができます(削除するディレクトリの親ディレクトリで操作している場合):

rmdir \~

または、ドット付きの相対パスを現在のディレクトリとして使用できます(親ディレクトリにある場合も同様)。

rmdir ./~

または、完全な絶対パスを使用できます。

rmdir /home/USERNAME/~

心配する必要はありませんrmdir。空のディレクトリのみを削除できます。誤ってコマンドを誤って入力し、パスが実際のホームディレクトリに評価される場合、ファイルが含まれているため危険ではありません。

$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty

相対パスオプションが好きです。現在どのディレクトリにいるかに関係なく、にマップ./~することは不可能~/です。完全な絶対パスを使用した同様の状況。
MBraedley

2

findコマンドはそのような奇跡を起こすことができます。コマンド

ls -i

iノード数のファイルまたはディレクトリが表示されます。次に、次を使用findして、そのようなファイルまたはディレクトリを削除することができます。

find . -inum <inode-number> -delete #for a file

そして

find . -inum <inode-number> -exec rm -rf {}\; #for directories

1

なすべきこと

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進値を使用できます。これは、実際と~は異なり、コマンドラインでユーザーのホームディレクトリに展開されません(疑問に思う場合は、つまり、ユーザーのホームディレクトリに展開されます。比較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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.