Yanlışlıkla “~” adlı bir dizin yaratıldı (tilde)


47

Kelimenin tam anlamıyla adlandırılmış bir dizin yapmayı başardım ~.

(Görünüşe göre, Python's os.mkdir('~/something')bunu yapıyor.)

Evimi vurmadan nasıl çıkarabilirim?

Ayrıca, eğer yardımı olacaksa, gerçek /homeolanı ayrı bir bölüme sahibim . Ve yinelenen ~de ( gerçek ) 'de bulunur ~.


51
Zorunlu XKCD . Tamam, zorunlu olduğu konusunda yalan söylemiş olabilirim. Ve bir XKCD olmak.
Jesvin Jose

30
Sormadığınız Python sorusunu cevaplamak için gelecekte kullanın os.mkdir(os.path.expanduser('~/something')).
Matt Nordhoff

8
... sadece merak için, python dizini oluşturduğunuzdan beri os.rmdir('~/something')silmek için yapmayı düşünmediniz mi?
Bakuriu

@Bakuriu Sonunda, yaptığımız rakam olduğuna dikkat
UniversallyUniqueID

Yanıtlar:


73

Escape ~ile \~veya tek tırnak '~'. Böylece yapabilirsiniz

rmdir ~/\~

veya

cd ~ ; rmdir '~'

43
Yapmamanız gereken bir şeyi silmekle ilgili endişeleriniz varsa, ilk önce tahrip edici olmayan bir şey yapabilirsiniz: mv '~' normalname, sonra normalname dizinini kaldırın.
Chris Jefferson

53
rmdirtahribatsızdır. rmdiryalnızca boş olan dizinleri siler, bu nedenle rmdiriçinde bir şey olan herhangi bir dizini denerseniz , rmdirsilmeyi reddeder.
Hitechcomputergeek

3
Bu komutlardan ilkiyle tilde kaçmanıza bile gerek kalmaz - ~özellikle sadece bir kabuk kelimesiyle genişletilir.
Henning Makholm

1
Sadece bile yapabilirsiniz rmdir *. Yalnızca boş dizinleri kaldırdığından, yıkıcı bir şey yaptığından endişelenmenize gerek yoktur.
Benubird

@ChrisJefferson: Önce komutunuzu kontrol etmek istiyorsanız, istediğiniz ls -ddizini ya da dosyayı listelediğini görmek için kullanın. Gibi bir etkisi olan bir şeye gerek yok mv.
Peter Cordes,

42

Python'un verdiği şey, python uzaklaştı:

$ 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

Öyleyse os.mkdir, bunu geri alabilirsiniz os.rmdir(ve benzer şekilde os.makedirsve için os.removedirs).


36

Dizin adından böyle bir ters eğik çizgi kullanarak çıkabilirsiniz (silmek istediğiniz birinin ana dizininde çalıştığınızı varsayarak):

rmdir \~

Veya geçerli dizin olarak bir noktaya sahip göreceli yolları kullanabilirsiniz (ayrıca üst dizinde bulunduğunda):

rmdir ./~

Veya tam yolu kullanabilirsiniz:

rmdir /home/USERNAME/~

Endişelenmeyin, rmdiryalnızca boş dizinleri kaldırabilirsiniz. Yanlışlıkla komutu yanlış yazarsanız ve yol gerçek giriş dizininize göre değerlendirilirse, dosyalar içerdiğinden tehlike altında değildir:

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

Göreceli yol seçeneğini seviyorum. Haritaya imkansız olmalıdır ./~için ~/. Bakmaksızın anda konum hangi dizin içinde, tam mutlak yol ile benzer bir durum.
MBraedley

2

findkomutu böyle mucizeler yapabilir. Komuta

ls -i

size inode dosya veya dizin sayısını verecektir. Sonra aşağıdakileri findkullanarak bu dosyaları veya dizini silmek için kullanabilirsiniz :

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

ve

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

1

Ne yapılmalıydı

home=os.path.expanduser("~")Önce ve sonra gerçekleştirmeliydin os.path.join(home,"something"). ~Python metin olarak ele alınır ve bunun içinde yaptığı gibi genişletmek değil bashveya diğer kabuklar.

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

Ondan nasıl kurtulurum

Daha önce belirtilen yöntemlere ek olarak, ~ascii karakter tablosundan onaltılı değeri kullanabiliriz ; bu durum gerçeklerin aksine ~komut satırında kullanıcının ana dizinine genişletmez (Merak ediyorsanız, tilde başlangıcında göründüğünde bir kelime, kullanıcının ev dizinine genişletir. karşılaştırın ls ~ve ls $'\x7e').

İşte nasıl işe yarar:

# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.