自身の中の間接的にディレクトリを削除する


9

自分の中にディレクトリがあります。どうすれば削除できますか?

~/.local/share/Trash/files$ ls devices/
reg-dummy
~/.local/share/Trash/files$ ls devices/reg-dummy/
subsystem
~/.local/share/Trash/files$ ls devices/reg-dummy/subsystem/
devices

また

~/.local/share/Trash/files$ find devices/ | head -n 20
devices/
devices/reg-dummy
devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy

また、私の脳は停止問題を解決することはできませんが、sudo rm -rf devices出力を生成せずに永遠に続くようです。

~/.local/share/Trash/files$ sudo rm -rf devices
^C~/.local/share/Trash/files$

同じことperl -e 'use File::Path qw(remove_tree); remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'。同じことdu -s devices/du -sch ~/.local/share/Trash/ 他のコマンドでも同じ

$ cd ~/.local/share/Trash/files/devices/reg-dummy/subsystem/devices/
$ ls -ldi 
8131921 drwxr-xr-x 3 theking theking 4096 Mar 17 19:43 .
$ cd reg-dummy/subsystem/devices/
$ ls -dli
8131926 drwxr-xr-x 3 theking theking 4096 Mar 17 19:43 .


$ find .local/share/Trash/files/ -maxdepth 1 -delete
find: cannot delete `.local/share/Trash/files/devices': Directory not empty
find: cannot delete `.local/share/Trash/files/': Directory not empty

いつまでもゴミにこだわってほしくない!

注:単純にを使用してコンピューターの大まかなバックアップを作成scpしていたところ、スペースが足りなくなり、これが起こりました。


削除しようとしたコマンドとエラーが発生したことをお知らせください。何をしrm -rf devicesますか?
terdon 2014年

ls -dli devicesand の出力も追加してくださいls -dli devices/reg-dummy/subsystem/devices/
terdon

3
最初のコマンドはでなくてls -ldi devicesはなりませんdevice。これらが実際にハードリンク(同じiノード)であるかどうかを確認しようとしています。ただし、これが大きなディレクトリである場合は、rm -rf時間がかかりますが、最終的には機能することに注意してください。ここでの問題が循環リンクの場合、無限再帰に関するエラーメッセージが表示されます。エラーメッセージがない場合は、そのままrm -rf実行してください。
terdon 2014年

7
@terdon:Linux(少なくともUbuntu)はハードリンクされたディレクトリを許可しないと思いましたか?
saiarcot895 2014年

2
nautilusの組み込みの「空のゴミ箱」ボタンを試してみただけだと思いますか?(たぶん、彼らは
nautilusを

回答:


3

の出力にls -ldiは、ディレクトリのiノード番号が表示されます。ディレクトリ内のディレクトリの名前が同じではなく、祖先と同じiノード番号である場合、ファイルシステムが破損しているため、レスキューモードで起動してfsckを実行する必要があります。


1

rm -rf十分な時間を与えればそれでもうまくいくと思いますが、そうでなければ、これらの1つまたは両方で次のようにする必要があります。

perl -e 'use File::Path qw(remove_tree); 
        remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'`

 

find .local/share/Trash/files/ -delete

少なくともそれを使用すれば、ファイルが削除されていることを知らせる何かが起こっていることを確認できrm -rfv ~/.local/share/Trash/files/devicesます。

とにかく、Linuxではディレクトリをハードリンクできないため、これはハードリンクの問題にはなりません(非常に間違ったコメントですが)。一般に、ソフトリンクで発生する可能性があるように、無限再帰が発生すると、その影響についてのメッセージが表示されますが、発生していないように見えます。

私が考えることができるもう1つの可能性は、ゴミ箱フォルダが独自の奇妙なシステムであるということです。私はそれがどのように機能するのか本当に知りません、私はそれを決して使いません。ただし、問題のあるディレクトリをターゲットにするのではなく、最上位のファイルを直接削除した方が幸運かもしれません。

rm -rf ~/.local/share/Trash/* 

また、GUIからゴミ箱フォルダを空にしてみてください。ゴミ箱を選択して、「ゴミ箱を空にする」をクリックしてください。


彼らは両方とも失敗した。質問が修正されました。
PyRulez 2014年

@PyRulezこのディレクトリの大きさは?perlスクリプトもrmも出力を生成しません。彼らはどのくらい走ったのですか?findコマンドも更新しましたが、前のコマンドは間違っていました。更新された回答をご覧ください。最後に、ここではブラインドで作業しています。ls -l使用した場所の出力で質問を更新してください。また、サイズを知るためにls結果も表示してdu -sch ~/.local/share/Trash/ください。
terdon 2014年

サイズがわかりませんでした。
PyRulez 2014年

@PyRulez du -sch ~/.local/share/Trash/はあなたにサイズを与えるでしょう。そして、さまざまなコメントが求めているすべてのものを追加してください。何が起こっているのかを理解するために必要です。
terdon 2014年

@tedron行ったことがある。
PyRulez 2014年

0

(私はこれがうまくいくと確信しています。今旅行するつもりなので、これが解決しない場合は将来的に削除できる答えとして残します。)

  1. まず、安全のために実行します

    find ~/.local/share/Trash/files/devices/ -exec echo {} \;
    
  2. 次に、「1」の出力に重要なファイルが表示されなかった場合は、次を実行します。

    find ~/.local/share/Trash/files/devices/ -exec rm {} \;
    
  3. 最後のステップは

    find ~/.local/share/Trash/files/devices/ -empty -type d -delete
    
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.