실수로 "~"라는 이름의 디렉토리 (물결표)


47

나는 문자 그대로 라는 디렉토리를 만들었습니다 ~.

(분명히 파이썬 os.mkdir('~/something')은 이것을합니다.)

집을 막지 않고 어떻게 제거합니까?

또한 도움이된다면 /home별도의 파티션에 실제 정보가 있습니다. 그리고 복제본 ~은 ( 실제 )에 ~있습니다.


51
의무적 인 XKCD . 좋아, 나는 그것이 의무적이라고 거짓말했을 수도 있습니다. 그리고 XKCD입니다.
Jesvin Jose

30
나중에 묻지 않은 Python 질문에 대답하려면을 사용하십시오 os.mkdir(os.path.expanduser('~/something')).
Matt Nordhoff

8
... 호기심을 위해서, 파이썬으로 디렉토리를 만들었으므로 디렉토리 os.rmdir('~/something')를 삭제하려고 생각하지 않았 습니까?
Bakuriu

@Bakuriu는 결국, 나는 않았다 알아낼
UniversallyUniqueID

답변:


73

탈출 ~\~또는 작은 따옴표를 사용합니다 '~'. 그래서 당신은 할 수 있습니다

rmdir ~/\~

또는

cd ~ ; rmdir '~'

43
원하지 않는 것을 삭제하는 것이 걱정된다면 먼저 mv '~'normalname과 같은 비파괴적인 것을 수행 한 다음, normalname 디렉토리를 제거하십시오.
Chris Jefferson

53
rmdir비파괴입니다. rmdir비어있는 디렉토리 만 삭제하므로, rmdir디렉토리가 전혀없는 디렉토리를 시도 rmdir하면 삭제를 거부합니다.
Hitechcomputergeek

3
첫 번째 명령에서 물결표를 벗어날 필요조차 없습니다 ~. 쉘 "word"의 시작 부분에서만 특별히 확장됩니다.
Henning Makholm

1
당신은 단지 할 수 있습니다 rmdir *. 빈 디렉토리 만 제거하므로 파괴적인 일을 걱정할 필요가 없습니다.
Benubird

@ChrisJefferson : 명령을 먼저 확인하려면 명령을 사용 ls -d하여 원하는 디렉토리 또는 파일이 나열 되어 있는지 확인하십시오 . 와 같은 효과가있는 것은 필요 없습니다 mv.
Peter Cordes

42

파이썬이주는 것, 파이썬이 빼앗는 것 :

$ 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).


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

inode 수의 파일 또는 디렉토리를 제공합니다. 그런 다음 다음을 사용 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"). 는 ~파이썬에서 텍스트로 처리하고에서와 같이 확장하지 않습니다 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.