Direktori yang dibuat secara tidak sengaja bernama "~" (tilde)

47

Aku berhasil membuat sebuah direktori harfiah bernama ~.

(Rupanya, Python os.mkdir('~/something')melakukan ini.)

Bagaimana cara menghapusnya tanpa nuking rumah saya?

Juga, jika itu membantu, saya punya yang asli /homedi partisi yang terpisah. Dan duplikat ~itu berada di (yang asli ) ~.

Secara universal unik
sumber
51
XKCD wajib . Ok, saya mungkin berbohong bahwa itu wajib. Dan menjadi XKCD.
Jesvin Jose
30
Untuk menjawab pertanyaan Python yang tidak Anda tanyakan, di masa depan, gunakan os.mkdir(os.path.expanduser('~/something')).
Matt Nordhoff
8
... hanya untuk rasa ingin tahu, karena Anda membuat direktori dengan python tidakkah Anda berpikir os.rmdir('~/something')untuk menghapusnya?
Bakuriu
@Bakuriu Akhirnya, saya melakukan sosok yang keluar
UniversallyUniqueID

Jawaban:

73

Melarikan diri ~dengan \~atau menggunakan kutipan tunggal '~'. jadi kamu bisa

rmdir ~/\~

atau

cd ~ ; rmdir '~'
Marcin Krasowski
sumber
43
Jika Anda khawatir menghapus sesuatu yang tidak seharusnya Anda lakukan, pertama-tama Anda dapat melakukan sesuatu yang tidak merusak seperti: mv '~' normalname, kemudian hapus direktori normalname.
Chris Jefferson
53
rmdirtidak merusak. rmdirhanya akan menghapus direktori yang kosong, jadi jika Anda mencoba rmdirdirektori apa pun yang ada di dalamnya, rmdirakan menolak untuk menghapusnya.
Hitechcomputergeek
3
Anda bahkan tidak perlu melarikan diri dari tilde pada perintah pertama - ~diperluas secara khusus hanya pada awal kata "shell".
Henning Makholm
1
Anda bahkan bisa saja rmdir *. Karena hanya menghapus direktori kosong, Anda tidak perlu khawatir tentang melakukan sesuatu yang merusak.
Benubird
@ ChrisJefferson: Jika Anda ingin memeriksa perintah Anda terlebih dahulu, gunakan ls -duntuk melihat apakah itu mencantumkan direktori atau file yang Anda inginkan. Tidak perlu apa pun dengan efek seperti mv.
Peter Cordes
42

Apa yang python berikan, python dibawa pergi:

$ 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

Jika Anda melakukannya os.mkdir, Anda dapat membatalkannya dengan os.rmdir(dan juga untuk os.makedirsdan os.removedirs).

muru
sumber
36

Anda dapat keluar dari nama direktori menggunakan backslash seperti ini (dengan asumsi Anda beroperasi di direktori induk yang ingin Anda hapus):

rmdir \~

Atau Anda dapat menggunakan jalur relatif dengan titik sebagai direktori saat ini (juga ketika berada di direktori induk):

rmdir ./~

Atau Anda dapat menggunakan jalur absolut penuh:

rmdir /home/USERNAME/~

Dan jangan khawatir, rmdirhanya dapat menghapus direktori kosong. Jika Anda secara tidak sengaja salah ketik perintah dan jalur akan mengevaluasi ke direktori home Anda yang sebenarnya, itu tidak dalam bahaya karena mengandung file:

$ rmdir directory_with_files
rmdir: failed to remove ‘directory_with_files’: Directory not empty
Komandan Byte
sumber
Saya suka opsi jalur relatif. Seharusnya tidak mungkin untuk memetakan ./~ke ~/, terlepas dari direktori Anda saat ini. Situasi yang sama dengan path absolut penuh.
MBraedley
2

findPerintah dapat melakukan mukjizat seperti itu. Perintah

ls -i

akan memberi Anda nomor inode file atau direktori. Kemudian Anda dapat menggunakan finduntuk menghapus file atau direktori tersebut menggunakan:

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

dan

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

Apa yang seharusnya dilakukan

Anda seharusnya tampil home=os.path.expanduser("~")pertama dan kemudian os.path.join(home,"something"). Ini ~diperlakukan sebagai teks dalam python dan tidak berkembang seperti halnya di bashatau shell lainnya.

$ 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/

Bagaimana cara menghilangkannya

Selain metode yang telah disebutkan, kita dapat menggunakan nilai hex untuk ~dari tabel ascii karakter, yang tidak seperti yang sebenarnya ~tidak diperluas ke direktori home pengguna pada baris perintah (Jika Anda bertanya-tanya, ketika tilde muncul di awal kata, itu diperluas ke direktori home pengguna. Bandingkan ls ~dan ls $'\x7e').

Begini cara kerjanya:

# 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
Sergiy Kolodyazhnyy
sumber