노드 번호로 디렉터리를 삭제할 수 없습니다.

노드 번호로 디렉터리를 삭제할 수 없습니다.

노드 번호로 삭제하려고 해도 이름을 바꾸거나 삭제할 수 없는 빈 디렉터리가 있습니다. 내가 시도한 명령은 다음과 같습니다. 내가 본 유일한 예외는 쉘의 파일 이름 완성이 파일 이름 뒤에 슬래시를 추가한다는 것입니다(rmdir 명령에서 표시됨). 어떤 제안이라도 환영합니다. 파일 시스템은 ext4입니다.

$ ls
'Every Breath You Take: The Classics'

$ ls -bl
ls: 'Every Breath You Take: The Classics': No such file or directory
total 0
drwxrwxrwx 1 user user 0 Nov 28  2014 Every\ Breath\ You\ Take:\ The\ Classics

$ rmdir "Every Breath You Take: The Classics"/
rmdir: failed to remove 'Every Breath You Take: The Classics/': No such file or directory

$ stat "Every Breath You Take: The Classics"
stat: cannot stat 'Every Breath You Take: The Classics': No such file or directory

$ stat "Every Breath You Take: The Classics"/
  File: Every Breath You Take: The Classics/
  Size: 0           Blocks: 0          IO Block: 16384  directory
Device: 37h/55d Inode: 7323        Links: 1
Access: (0777/drwxrwxrwx)  Uid: ( 1000/ user)   Gid: ( 1000/ user)
Access: 2020-05-27 21:18:31.130341500 -0700
Modify: 2014-11-28 23:14:32.000000000 -0800
Change: 2019-02-02 13:27:19.052670600 -0800
 Birth: -

$ find . -inum 7323 -exec rmdir {} \;
rmdir: failed to remove './Every Breath You Take: The Classics': No such file or directory
find: ‘./Every Breath You Take: The Classics’: No such file or directory

다음은 여러 응답자가 제안한 결과입니다.


$ ls | hexdump -C
00000000  45 76 65 72 79 20 42 72  65 61 74 68 20 59 6f 75  |Every Breath You|
00000010  20 54 61 6b 65 3a 20 54  68 65 20 43 6c 61 73 73  | Take: The Class|
00000020  69 63 73 0a                                       |ics.|
00000024

$ rmdir *Every*
rmdir: failed to remove 'Every Breath You Take: The Classics': No such file or directory

$ rm -i -r Every*
rm: descend into directory 'Every Breath You Take: The Classics'? y
rm: cannot remove 'Every Breath You Take: The Classics': No such file or directory

답변1

해결되었습니다! 1년이 넘게 걸렸지만 해결책을 찾았습니다.

문제의 디렉터리는 네트워크에 연결된 저장 장치에 있는 것으로 나타났습니다. 그래서 ssh장치에 직접 연결 하곤 했는데 디렉토리를 확인해 보니 괜찮아 보였습니다. 표준 rmrmdir명령을 사용하여 내용을 삭제한 다음 디렉터리 자체를 삭제할 수 있었습니다 .

디렉토리가 데스크탑의 일반 명령에 응답하지 못하는 이유는 여전히 미스터리입니다.

답변2

체크(')가 파일 이름의 거의 일부인 것 같습니다.

$ ls
'Every Breath You Take: The Classics'

단순히 다음과 같이 말할 수는 없습니다.

$ rm 'Every Breath You Take: The Classics'

껍질이 진드기를 먹을 것이기 때문입니다.

대신 다음을 시도해 보세요.

$ rmdir  *Every*

관련 정보