Vô tình tạo thư mục có tên là ~ ~ (dấu ngã)


47

Tôi quản lý để làm cho một thư mục tên theo nghĩa đen~ .

(Rõ ràng, Python os.mkdir('~/something')làm điều này.)

Làm thế nào để tôi loại bỏ nó mà không cần đến nhà của tôi?

Ngoài ra, nếu nó giúp, tôi có thực sự của tôi /hometrên một phân vùng riêng. Và bản sao ~được đặt trong ( thực ) ~.


51
Bắt buộc XKCD . Ok, tôi có thể đã nói dối về việc đó là bắt buộc. Và là một XKCD.
Jesvin Jose

30
Để trả lời câu hỏi Python mà bạn không hỏi, trong tương lai, hãy sử dụng os.mkdir(os.path.expanduser('~/something')).
Matt Nordhoff

8
... chỉ vì tò mò, vì bạn đã tạo thư mục trong python, bạn không nghĩ phải làm gì os.rmdir('~/something')để xóa nó?
Bakuriu

@Bakuriu Cuối cùng, tôi đã tìm ra điều đó
Đại

Câu trả lời:


73

Thoát khỏi ~với \~hoặc sử dụng dấu ngoặc đơn '~'. để bạn có thể

rmdir ~/\~

hoặc là

cd ~ ; rmdir '~'

43
Nếu bạn lo lắng về việc xóa một cái gì đó bạn không nên, trước tiên bạn có thể làm một cái gì đó không phá hủy như: mv '~' normalname, sau đó xóa thư mục normalname.
Chris Jefferson

53
rmdirlà không phá hủy. rmdirsẽ chỉ xóa các thư mục trống, vì vậy nếu bạn cố gắng rmdirbất kỳ thư mục nào có bất cứ thứ gì trong đó, rmdirsẽ từ chối xóa nó.
Hitechcomputergeek

3
Bạn thậm chí không cần phải thoát dấu ngã trong các lệnh đầu tiên - ~được mở rộng đặc biệt chỉ khi bắt đầu "từ" shell.
Henning Makholm

1
Bạn thậm chí có thể chỉ rmdir *. Vì nó chỉ loại bỏ các thư mục trống, bạn không cần phải lo lắng về việc nó làm bất cứ điều gì phá hoại.
Benubird

@ChrisJefferson: Nếu bạn muốn kiểm tra lệnh của mình trước, hãy sử dụng ls -dđể xem nếu nó liệt kê thư mục hoặc tệp bạn muốn. Không cần bất cứ điều gì với một hiệu ứng như thế mv.
Peter Cordes

42

Con trăn gì, con trăn lấy đi:

$ 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

Nếu bạn đã làm os.mkdir, bạn có thể hoàn tác nó với os.rmdir(và tương tự cho os.makedirsos.removedirs).


36

Bạn có thể thoát tên thư mục bằng cách sử dụng dấu gạch chéo ngược như thế này (giả sử bạn đang hoạt động trong thư mục mẹ của thư mục bạn muốn xóa):

rmdir \~

Hoặc bạn có thể sử dụng các đường dẫn tương đối có dấu chấm làm thư mục hiện tại (cũng như khi nằm trong thư mục mẹ):

rmdir ./~

Hoặc bạn có thể sử dụng đường dẫn tuyệt đối đầy đủ:

rmdir /home/USERNAME/~

Và không phải lo lắng, rmdirchỉ có thể loại bỏ các thư mục trống. Nếu bạn vô tình gõ nhầm lệnh và đường dẫn sẽ đánh giá vào thư mục chính thực sự của bạn, nó không gặp nguy hiểm vì nó chứa các tệp:

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

Tôi thích tùy chọn đường dẫn tương đối. Không thể ánh xạ ./~tới ~/, bất kể bạn đang ở thư mục nào. Tình huống tương tự với đường dẫn tuyệt đối đầy đủ.
MBraedley

2

findlệnh có thể làm phép lạ như vậy. Lệnh

ls -i

sẽ cung cấp cho bạn số inode của tập tin hoặc thư mục. Sau đó, bạn có thể sử dụng findđể xóa các tập tin hoặc thư mục đó bằng cách sử dụng:

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

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

1

Những gì nên được thực hiện

Bạn nên thực hiện home=os.path.expanduser("~")đầu tiên và sau đó os.path.join(home,"something"). Nó ~được coi là văn bản trong python và không mở rộng như nó trong bashhoặc các shell khác.

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

làm thế nào để thoát khỏi nó

Ngoài các phương thức đã được đề cập, chúng ta có thể sử dụng giá trị hex cho ~từ bảng ký tự ascii, không giống như thực tế ~không mở rộng sang thư mục chính của người dùng trên dòng lệnh (Trong trường hợp bạn đang tự hỏi, khi dấu ngã xuất hiện ở đầu một từ, nó mở rộng đến thư mục nhà của người dùng. So sánh ls ~ls $'\x7e').

Đây là cách nó sẽ hoạt động:

# 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.