web-dev-qa-db-ja.com

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

ディレクトリを作成できましたliterally named ~

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

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

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

47

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

rmdir ~/\~

または

cd ~ ; rmdir '~'
74

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.makedirsos.removedirsについても同様です)。

42
muru

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

rmdir \~

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

rmdir ./~

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

rmdir /home/USERNAME/~

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

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

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

ls -i

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

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

そして

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

なすべきこと

最初に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
1