이름에 하이픈이있는 UNIX 디렉토리 삭제 했어: rmdir —

필자의 실수로 (예를 들어) -A라는 디렉토리를 실수로 만들어 파일로 채웠습니다.

해당 디렉토리를 삭제하고 싶습니다. 난 노력 했어:

rmdir -- -A

그러나 디렉토리에 여전히 파일이 있음을 알려줍니다. 그리고 나는 디렉토리로 들어가서 해당 파일을 삭제하는 방법을 알 수 없습니다.

이 성가신 디렉토리를 제거하려면 어떻게해야합니까?



답변

모든 명령에-를 사용하십시오.

$ ls -la
total 32
drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
$ mkdir -- -A
$ ls -la
total 36
drwxr-xr-x  2 richard  richard  512 Jul 28 15:44 -A
drwxr-xr-x  4 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
$ cd -- -A
$ ls
$ pwd
/home/richard/-A
$ cd ..
$ rm -rf -- -A
$ ls -la
total 32
drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..


답변

파일 앞에 ./를 넣을 수 있습니다. 이렇게하면 파일 이름이 옵션 플래그 인 것처럼 rm 또는 rmdir이 동작하지 않습니다.

또한 옵션을 발행 할 수 있습니다.이 옵션을 사용하면 rm 이후의 모든 것이 마치 파일 이름처럼 작동하고 더 이상 옵션을 처리하지 않아야합니다. 요즘에는 골동품 유닉스 동물원이 아주 작아서 펑키 한 RM 버전이있을 수 있습니다.

어쨌든 삭제할 때 이름 앞에 ./를 두는 습관을 가져야합니다. 디렉토리에 -r 또는 -rf라는 이름의 파일이 있는지 알 수 없습니다. 당신은 항상 —를 사용해야한다고 말할 수 있지만 ./는 더 자연 스럽습니다. “*이 디렉토리에서 파일을 삭제하고 싶습니다.


답변

이름을 바꾼 다음 정상적으로 처리하십시오.

$ mv -- -A foo
$ find foo
$ rm -rf foo


답변

rmdir은 내부에 아무 것도없는 디렉토리를 삭제하지 않습니다. “rm -rf”가됩니다. rmdir은 “rm -rf”보다 훨씬 안전합니다. 무의 대답은 여전히 ​​최고 일 것입니다.


답변

rm -fr ./-A

위의 명령이 저에게 효과적입니다.


답변

다른 방법은 inode로 삭제하는 것입니다 (이것은 rm만으로는 삭제하기 어려운 다른 문자가있는 파일 / 디렉토리에서 작동합니다).

bash-3.2$ ls -i
4905937 angry-1.gif
5174052 hermes
5172770 make_hosts.pl
bash-3.2$ find . -inum 5172770 -exec rm -f {} \;
bash-3.2$ ls -i
4905937 angry-1.gif
5174052 hermes
bash-3.2$


답변

find는 다음과 같은 방법으로 디렉토리를 삭제할 수 있습니다.

find . -type d -iname '-A' -delete