Hapus direktori secara tidak langsung di dalam dirinya

9

Saya memiliki direktori di dalamnya. Bagaimana cara saya menghapusnya.

~/.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

Juga

~/.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

Juga, meskipun otak saya tidak dapat menyelesaikan masalah penghentian, tampaknya itu sudo rm -rf devicesberlangsung selamanya tanpa menghasilkan keluaran.

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

Hal yang sama untuk perl -e 'use File::Path qw(remove_tree); remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'. Hal yang sama untuk du -s devices/. Hal yang sama untuk du -sch ~/.local/share/Trash/ perintah lainnya

$ 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

Saya tidak ingin itu terjebak di tempat sampah saya selamanya!

Catatan: Saya membuat cadangan kasar komputer dengan hanya menggunakan scp, dan tetapi saya kehabisan ruang dan kemudian ini terjadi.

PyRulez
sumber
Tolong tunjukkan kepada kami perintah yang Anda coba hapus beserta kesalahannya. Apa yang rm -rf devicesharus dilakukan
terdon
Silakan juga tambahkan output ls -dli devicesdanls -dli devices/reg-dummy/subsystem/devices/
terdon
3
Perintah pertama seharusnya ls -ldi devices, bukan device. Saya mencoba melihat apakah ini benar-benar tautan keras (inode yang sama). Namun, perlu diketahui bahwa jika ini adalah direktori besar, rm -rfakan memakan waktu lama tetapi pada akhirnya akan berfungsi. Jika masalah di sini adalah tautan melingkar, Anda akan mendapatkan pesan kesalahan tentang rekursi tak terbatas. Jika tidak ada pesan kesalahan, biarkan rm -rfjalankan saja.
terdon
7
@terdon: Saya pikir Linux (setidaknya Ubuntu) tidak mengizinkan direktori yang ditautkan?
saiarcot895
2
Saya hanya berasumsi Anda sudah mencoba dengan tombol "kosong sampah" bawaan nautilus? (mungkin mereka memikirkan hal-hal semacam itu ketika menulis nautilus ^^)
MrVaykadji

Jawaban:

3

Output ls -ldiakan menampilkan nomor inode direktori. Jika direktori dalam direktori benar-benar memiliki nomor inode yang sama dengan leluhurnya, bukan hanya dengan nama yang sama, maka sistem file Anda rusak dan Anda harus boot ke mode penyelamatan dan fsck itu.

psusi
sumber
1

Saya masih berpikir itu rm -rfakan berhasil jika Anda memberikan waktu yang cukup tetapi jika tidak, salah satu atau keduanya harus:

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

 

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

Anda bisa memastikannya sesuatu sedang terjadi jika Anda menggunakan rm -rfv ~/.local/share/Trash/files/devicessetidaknya yang akan memberi tahu Anda bahwa file sedang dihapus.

Bagaimanapun, ini tidak bisa menjadi masalah hardlink (walaupun komentar saya sangat salah) karena direktori tidak dapat di-hardlink di Linux. Secara umum, ketika Anda memiliki rekursi tak terbatas, seperti yang dapat terjadi dengan softlink, Anda akan mendapatkan pesan untuk efek itu, yang tampaknya tidak terjadi.

Kemungkinan lain yang dapat saya pikirkan adalah bahwa folder Trash adalah beberapa sistem anehnya sendiri. Saya tidak benar-benar tahu cara kerjanya, saya tidak pernah menggunakannya. Namun, Anda mungkin lebih beruntung menghapus file tingkat atas secara langsung daripada menargetkan direktori yang bermasalah:

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

Anda juga harus mencoba mengosongkan folder Trash dari GUI, cukup pilih Trash dan klik "Empty Trash", lihat apakah itu berfungsi.

terdon
sumber
Keduanya gagal. Pertanyaan direvisi.
PyRulez
@PyRulez seberapa besar direktori ini? Baik skrip perl maupun rmakan menghasilkan output apa pun. Berapa lama mereka berlari? Saya juga memperbarui findperintah, yang sebelumnya salah, maaf. Lihatlah jawaban yang diperbarui. Akhirnya, kami bekerja buta di sini. Harap perbarui pertanyaan Anda dengan output dari ls -ltempat Anda telah menggunakan ls, juga tunjukkan hasilnya du -sch ~/.local/share/Trash/agar kami tahu ukurannya.
terdon
Saya tidak dapat menemukan ukurannya.
PyRulez
@PyRulez coba du -sch ~/.local/share/Trash/yang akan memberi Anda ukuran. Dan tolong tambahkan semua hal yang diminta berbagai komentar, itu diperlukan agar kami dapat memahami apa yang terjadi.
terdon
@ Atron saya telah.
PyRulez
0

(Saya yakin ini akan berhasil dan karena saya akan melakukan perjalanan sekarang, saya akan meninggalkan ini sebagai jawaban yang dapat saya hapus di masa depan jika tidak berhasil.)

  1. Pertama, agar aman, jalankan

    find ~/.local/share/Trash/files/devices/ -exec echo {} \;
    
  2. Kedua, jika output "1" tidak menampilkan file penting, maka jalankan

    find ~/.local/share/Trash/files/devices/ -exec rm {} \;
    
  3. Langkah terakhirnya adalah

    find ~/.local/share/Trash/files/devices/ -empty -type d -delete
    
desgua
sumber