"rm -rf"를 사용하여 디렉토리를 삭제하려고 시도하지만 비어 있지 않다는 메시지가 표시됩니다.


36

"rm -rf"를 사용하여 디렉토리를 삭제하려고했는데 "Directory not empty"메시지가 나타납니다.

Bens-MacBook-Pro:please benjaminhocking$ ls -lart empty_directory/
total 16
drwxr-xr-x  5 benjaminhocking  staff  170 Aug 27 14:46 .
drwxr-xr-x  3 benjaminhocking  staff  102 Aug 27 15:28 ..
Bens-MacBook-Pro:please benjaminhocking$ rm -rf empty_directory/
rm: empty_directory/: Directory not empty
Bens-MacBook-Pro:please benjaminhocking$ rmdir empty_directory/
rmdir: empty_directory/: Directory not empty

Finder를 사용하여 같은 것을 시도하면 (폴더를 휴지통으로 드래그) 메시지가 나타납니다.

"empty_directory"항목이 사용 중이므로 작업을 완료 할 수 없습니다.

나는 xattr -d com.apple.quarantine순전히 미신에서 벗어나 려고 노력했지만 좋지 않았습니다.

컨텍스트의 중요한 부분은이 디렉토리가 처음에 터미널을 잠그기 전에 발행 한 "make clean"명령에 의해 삭제 된 디렉토리에 있었기 때문입니다. 그 후에 다른 프로그램의 절반 이상이 Skype, 결국에는 OS 자체를 포함하여 실행이 중단되었습니다. 전원 키를 길게 눌러 컴퓨터를 재부팅해야했습니다.

추가 편집 : 내가 중단 한 또 다른 중요한 정보는 이것이 암호화 된 폴더 à la에서 발생했다는 것 encfs입니다. 암호화 된 부분에서 해당 폴더를 추적하고 삭제할 수있었습니다. 나는 왜 내가 평소처럼 암호 해독 된 측면에서 그것을 할 수 없었는지 아직도 모른다. 누구든지 그것에 대한 좋은 대답이있는 경우를 대비하여 지금은 대답하지 않습니다.


2
이 디렉토리 내에 다른 셸이 열려 있거나 사용중인 앱이 있습니까? "사용 중"이라는 용어는 또한 의미가 없습니다. (나는 그것을 경험할 수 rmdir없었지만, 종종 볼륨을 마운트 해제 할 수없는 원인입니다).
Izzy

당시 특정 명령이 발행되지 않았습니다. 그 직전에 재부팅을 완료했습니다.
벤 호킹

때로는 EncFS와 동일한 문제가 있으며 지금까지는 이것을 해결하는 방법을 모릅니다. 새로운 것이 있습니까?
Martin Preusse

@emempe : 마지막으로 마지막으로 수행 한 것은 마지막 수정 된 타임 스탬프를 식별자로 사용하여 암호화 된 공간에서 폴더를 삭제하는 것이 었습니다. 더 위험 할 수 있습니다. 더 나은 해결책을 찾으면 알려 드리겠습니다.
Ben Hocking

@ BenHocking : 저도 그렇게합니다. 나에게는 거의 일어나지 않으므로 이것으로 괜찮습니다. 여전히 EncFS가 어떻게 든 손상되었다는 느낌이 마음에 들지 않습니다 ...;) 내 EncFS가 Dropbox에 연결되어 있습니까?
Martin Preusse

답변:


12

컴퓨터를 재부팅하고 rmdir(1)다시 실행 하십시오.

$ rmdir -r empty_directory/

그래도 작동하지 않으면 다음을 시도하십시오.

$ rm -rf empty_directory/

OS X가 lsof(8)사전 설치되어 있다고 가정하여 여전히 작동하지 않으면 다음을 입력하십시오.

$ lsof +D empty_directory/

이 디렉토리에있는 파일이 프로그램에서 사용 중인지 알려줍니다. HFS + 파일 시스템은 사용중인 파일을 삭제할 수 없다고 생각합니다. 어쨌든 killall(1)이 디렉토리 나 그 안에 숨겨진 파일을 사용하는 실행 파일. Finder가 empty_directory디렉토리에 숨겨진 파일을 사용하여 폴더보기 설정을 저장했을 수 있습니다. 이것이 도움이되기를 바랍니다.

PS : lsof(8)설치되어 있는지 확인하려면 다음을 입력하십시오.

$ lsof

출력이 다음과 같으면 lsof(8)시스템에 설치된 것입니다.

lsof: /usr/bin/lsof /usr/bin/X11/lsof /usr/share/man/man8/lsof.8.gz

해당 디렉토리에 숨겨진 암호화 파일 또는 암호화 키 파일이 있는지 확인하십시오. 이들은 범인이 될 수 있습니다.


4

디스크 유틸리티를 사용하여 디스크를 복구하면이 문제가 해결되었습니다.


이것은 내가 믿는 대부분의 시나리오에서 작동합니다. 완전히 나를 위해 일했습니다. 고맙습니다
GeekRide

특정 명령은 파일 메뉴 아래의 "First First Aid ..."입니다. 나는 그것을 깨닫기 전에 메뉴에서 "수리"라는 단어를 검색하는 데 시간이 너무 오래 걸렸습니다!
RoG

3

이런 일이 발생하고 모든 항목을 삭제하려면 확실하게 사용하십시오. sudo rm -rf directory/


1
~ / .Trash에서는 어떤 이유로 작동하지 않습니다.
MarcusJ

2
문제가 권한이 아닌 한 실제로 작동하지 않습니다. 콘솔에 다른 오류 메시지가 표시됩니다.
tresf

2

디렉토리 (rm -r dirname)를 제거하는 동안이 오류가 발생했습니다. 이 스레드를 검색하고 발견하기 전에 여기에서 읽은 모든 제안을 이미 시도했습니다. 원래 질문에서 의도하지 않은 추가 포인트가 있는지 여부는 알 수 없지만 제 경우에는 문제의 근원이었고 해결책은 다음과 같습니다.

  • 해당 디렉토리가 네트워크 마운트 디스크에 있음

  • 어떤 ls파인더 또는 명령 줄에서 시도가 아무 것도 없었다하지만 ...

  • ssh명령을 통해 네트워크 디스크 서버에 로그인하여 확인 ls -al했습니다. 결과 에는 확장 된 보안 정보가있는 여러 항목 ( .및 모드 에 추가됨)이 및 에 추가되었습니다 ....__filename+

나는이가 생각, 또는 처음 사용할 때 년 전에 생성 맥 OSX 언급 한 파일과 유사 cp -R, tar또는 cpio파일의 아카이브 또는 이동 그룹은. 나는 그들이 이동 후 일부 파일 속성을 올바르게 재설정하는 데 사용되었다고 추론했습니다-아마도 uid / gid, mode, acls, mtime / utime / ctime 등; 난 정말 모르겠어요 - 한 속성을 하지 그 시간 전에 해당 명령에 의해 제대로 리셋을 받고 (나는 OSX 포함하는 데 사용되는 것을 기억 mvmac하고 cpmac이 전에 명령이 문제를 해결하려면 .__filename파일 유형의 일반적인 형태를 사용하는 경우 나타나기 시작 cp, tar등).

내장, USB 또는 Firewire 드라이브에 파일을 쓸 때 이러한 파일을 삭제하는 데 문제가 없었습니다. 네트워크 디스크에서 처음 발견 한 것입니다. 마운트의 클라이언트 쪽에서는 완전히 감지 할 수 없지만 서버 쪽에서 보면 모든면에서 정상입니다.

rm -rf dirname 네트워크 디스크 서버의 로그인에서 디렉토리의 내용과 함께 디렉토리를 올바르게 제거했습니다.

따라서 가치있는 것에 대한 또 다른 대답이 있습니다. 네트워크 디스크와 함께 누군가에게이 문제가 나타날 경우이 문제에 대한 또 다른 잠재적 인 해결책입니다.


2

결과없이 여기에 모든 답변을 시도했습니다. 그러나 mv 명령을 사용하여 디렉토리를 옆으로 이동할 수 있었 으므로 계속 진행할 수있었습니다.


2

나를 위해 일한 유일한 해결책은 /unix/234876/unable-to-delete-a-file-whatever-i-do 에서였습니다 .

/ tmp로 옮기고 다시 시작하십시오.

내가 시도한 다른 옵션은 다음과 같습니다.

  • 디스크 유틸리티-응급 처치.
  • lsof +D bad_file 출력이 보이지 않았다.
  • sudo rm -rf
  • 단일 사용자 터미널로 부팅 및 rm -rf.

1
단일 사용자 터미널에서 fsck를 도움이되지 않았다,도 rm -rf,도 lsof +D쇼 아무것도. 이상하게도 /tmp다시 시작한 후에도 제거되지 않았지만 문제가되는 디렉토리를로 이동할 수있었습니다 . 같은 문제가 남아 있지만 적어도 다소 문제가 있습니다.
anapsix

1

독자의 이익을 위해 :

rm -rf이런 경우 조심하십시오 ! 네트워크 공유 일 경우 다른 곳에서 문제를 일으킬 수 있습니다! 경고를 받았습니다!

거의 모든 경우 directory에가 비어 있는 것 같으면 rmdir directory또는를 사용하십시오 sudo rmdir directory. 사용하지 마십시오 rm(또는 delWindows에서). 그래도 문제가 해결되지 않으면이 요청을 차단 한 원인을 찾아 수정 한 다음 다시 시도해야합니다 rmdir.

OS-X는 모르지만 Unix / BSD 동작과 매우 유사하다고 생각합니다.

그것은 매우 가능성이 문제의 디렉토리 그냥이었다가 있다는 것입니다 마운트 지점 합니다 (encfs에서) 또는 (제거 할 디렉토리를 방지) 일부 부적절한 상태에서 읽기 전용 또는 붙어가 된 마운트 지점에있는. 이제 디렉토리를 강제로 제거하면 매우 나쁜 일이 발생할 수 있습니다.

좋은 경우에는 디렉토리가 실제로 비어 있으므로 제거하는 것 (마운트 등을 파괴하는 것)은 더 이상 해를 끼치 지 않았습니다. 나쁜 경우에는 비어 있지 않은 것 같습니다. 즉, 죽이고 싶지 않은 것을 버렸습니다. 이것은 모두 마운트 유형, 사용중인 드라이버 등에 따라 다릅니다. pp.

일이 합리적으로 잘 구현되면 일반적으로 나쁜 일이 발생하지 않습니다. 그러나 이것은 일반적인 경우가 아닙니다. 상황이 이미 이상한 상태에 있습니다. 즉, 무언가 잘못되었으므로 더 이상 혼합하지 마십시오! 무언가에 금이 가면 잘못 건 드리면 파손될 수 있습니다.

예를 들어 네트워크 공유에서 경쟁 조건에 도달하면 rm -rf다른 사람이 공유에 복사 한 데이터를 제거 할 수 있습니다 .

그러나 rmdir실제로 비어있는 디렉토리를 제거하는 것 외에는 절대로 해를 끼치 지 않습니다. NFS의 경우에는 mkdir및 에서만 원자 동작을 보장 rmdir하지만 다른 곳에서는 보장하지 않기 때문에 NFS에서도 마찬가지 입니다.

참고 사항 :

도구를 사용하여 마운트 포인트를 감지 할 수 있습니다 mountpoint directory. 또는 출력을 살펴보고 mount마운트를 찾으십시오. 그러나 적어도 리눅스에서는 이것이 거짓말을 할 수 있습니다. mountpoint유틸리티를보다 안정적이지만 덜 편리하게 사용하십시오 .

이 경우 마운트 포인트를 찾았 으면 마운트 포인트를 마운트 해제 한 다음 디렉토리를 제거 할 수 있습니다.이 순서는 다음과 같습니다.

umount directory rmdir directory

필요한 경우 sudo평소처럼을 사용하십시오.

노트:

  • 네트워크 공유는 rmdir액세스 권한으로 인해 거부 될 수 있습니다 .

  • rmdir실패한 파일 시스템은 실패 전략에 따라 거부 될 수 있습니다 . 아마도이 경우에 합리적인 메시지를 보게 될 것입니다.

  • Linux (및 아마도 최신 OS)에서는 다른 수단 (예 : 읽기 전용 마운트, SeLinux와 같은 기능 등)을 사용하여 액세스를 제한 할 수도 있습니다. 이것은 이것이 마운트 포인트라는 것을 알지 못하고 잘못된 것을 보지 못하지만 작동하지 않는다는 것을 의미합니다. 이 경우 다른 이유를 찾아야하며 OS에 매우 깊이 묻힐 수 있습니다. 합리적인 오류 메시지가 표시되면 도구에 따라 다릅니다. 또한 dmesgLinux에서 와 같이 syslog / kernel-log를 살펴보십시오 (죄송합니다, OS-X에 해당하는 것을 모르겠습니다).

  • 필수 파일 잠금도 소스 일 수 있습니다. 이것은 Windows에서 일반적이지만 일반적으로 Unix는 아니며 디렉토리에 대해서는 들어 본 적이 없습니다. 필수 파일 잠금은 POSIX에서 다루지 만 선택 사항입니다.

  • 그러한 경우에, 해당 디렉토리는 생각한 것과 다른 파일 시스템에 상주합니다. 명령을 사용하여 어느 것을 찾을 수 있습니다 df directory(OS-X에서도 동일하다고 생각합니다).

  • 당신은 같은 도구를 사용하여 깊은 검사 할 수 있습니다 stat또는 statfs디렉토리에. 그러나 이것들은 일반 사람들에게는 약간 낮은 수준이며, 종종 그러한 도구는 일반 사용자에게 잘 숨겨져 있습니다.

  • 디렉토리는 재미있는 이름의 파일을 가질 수 있습니다. 터미널 출력을 즉시 지우는 파일과 같이 존재하지 않는 것처럼 보입니다. ls -al | lessMidnightCommander 와 같은 것을 시도 하거나 사용 하십시오 mc.

버그, 헥 소르, 외계인 또는 요정과 같은 더 이국적인 것들을 포함한 다른 가능성의 기차가 있습니다. 그러나 일반적으로 거기에서 시작하는 것이 현명하지 않습니다. 대신 "인간이 가장 끔찍하기 때문에"오류를 먼저 찾아보십시오.


1

이것은 깨진 심볼릭 링크가 서버 측에 있고 CIFS를 통해 클라이언트에게 보이지 않는 방금 해결 한 경우 일 수 있습니다. symlink가 비어 있지 않은 디렉토리를 채웠지만 클라이언트는 디렉토리를 링크 해제하기 전에 디렉토리를 지우려는 목적으로 symlink를 보거나 통계 할 수 없습니다. 그것은 보이지 않았기 때문에 클라이언트 측에서 비어 있었지만 rm 이 시도 할 때 비어 있지 않은이 역설을 만들었습니다 . 서버에 대한 SSH 액세스 권한이있는 경우 해당 쉘을 시도하고 디렉토리가 실제로 비어 있는지 또는 심볼릭 링크가 손상되었는지 확인하십시오. Drobo5N 에서이 작업을 수행 할 수 있었고 엉덩이를 구했습니다.


이것은 비슷한 상황에있는 다른 사람들에게 도움이 될 수 있지만 당시에는 서버에 연결되지 않았으므로 분명히 그렇지 않았습니다.
Ben Hocking

0

Windows에서 해당 디렉토리를 열려고하면 Mac OS에 표시되지 않을 수 있습니다. Mac과 Win PC 사이에서 여러 번의 복사 작업 후에 비슷한 문제가 발생했습니다. 터미널에서도 디렉토리가 비어 있지만 Windows에서 숨겨진 Windows 파일을 발견하여 디렉토리를 성공적으로 제거했습니다.


0

터미널에서 :

  1. enter sudo su (명령 줄 프롬프트는 다음과 같이 전환되어야합니다 sh-3.2#.)
  2. 삭제할 폴더의 상위 폴더로 이동
  3. 들어가다 rm -rf TheDirectoryYouWantToDelete

0

응용 프로그램에서 사용중인 폴더를 삭제하는 중에이 문제가 발생했습니다. 응용 프로그램을 닫을 때이 오류가 발생하지 않고 폴더를 제거 할 수 있으므로 사용중인 응용 프로그램을 종료하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.