ノード番号でディレクトリを削除できません。

ノード番号でディレクトリを削除できません。

ノード番号で削除しようとしても名前を変更または削除できない空のディレクトリがあります。私が試したコマンドは次のとおりです。私が見た唯一の例外は、シェルのファイル名の補完がファイル名の後にスラッシュを追加することです(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*

関連情報