Xóa thư mục gián tiếp bên trong chính nó


9

Tôi có một thư mục bên trong chính nó. Làm thế nào để tôi xóa nó.

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

Cũng thế

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

Ngoài ra, mặc dù bộ não của tôi không thể giải quyết vấn đề tạm dừng, nó xuất hiện sudo rm -rf devicesmãi mãi mà không tạo ra đầu ra.

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

Điều tương tự cho perl -e 'use File::Path qw(remove_tree); remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")'. Điều tương tự cho du -s devices/. Điều tương tự cho du -sch ~/.local/share/Trash/ các lệnh khác

$ 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

Tôi không muốn nó bị mắc kẹt trong thùng rác của tôi mãi mãi!

Lưu ý: Tôi đã tạo một bản sao lưu thô của máy tính bằng cách sử dụng đơn giản scp, nhưng tôi đã hết dung lượng và sau đó điều này đã xảy ra.


Vui lòng cho chúng tôi biết lệnh bạn đã cố xóa nó và lỗi nó đã gây ra cho bạn. Không gì rm -rf deviceslàm gì?
terdon 18/03 '

Ngoài ra, vui lòng thêm đầu ra của ls -dli devicesls -dli devices/reg-dummy/subsystem/devices/
terdon 18/03/2016

3
Lệnh đầu tiên nên có ls -ldi devices, không device. Tôi đang cố gắng để xem nếu đây thực sự là các liên kết cứng (cùng một nút). Tuy nhiên, hãy lưu ý rằng nếu đây là một thư mục lớn, rm -rfsẽ mất nhiều thời gian nhưng cuối cùng sẽ hoạt động. Nếu vấn đề ở đây là liên kết vòng tròn, bạn sẽ nhận được thông báo lỗi về đệ quy vô hạn. Nếu không có thông báo lỗi, hãy rm -rfchạy khóa học của nó.
terdon

7
@terdon: Tôi nghĩ Linux (ít nhất là Ubuntu) không cho phép các thư mục được liên kết cứng?
saiarcot895

2
Tôi chỉ giả sử bạn đã thử với nút "thùng rác" tích hợp nautilus? (có lẽ họ đã nghĩ về những điều đó khi viết nautilus ^^)
MrVaykadji

Câu trả lời:


3

Đầu ra của ls -ldisẽ hiển thị số inode của thư mục. Nếu thư mục trong thư mục thực sự có cùng số inode với tổ tiên của nó, thay vì chỉ cùng tên, thì hệ thống tệp của bạn bị hỏng và bạn sẽ cần phải khởi động vào chế độ cứu hộ và fsck nó.


1

Tôi vẫn nghĩ rằng nó rm -rfsẽ hoạt động nếu bạn cho nó đủ thời gian nhưng nếu không, một hoặc cả hai nên:

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

 

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

Bạn có thể chắc chắn rằng một cái gì đó đang xảy ra nếu bạn sử dụng rm -rfv ~/.local/share/Trash/files/devicesít nhất sẽ cho bạn biết rằng các tập tin đang bị xóa.

Dù sao, đây không phải là vấn đề về liên kết cứng (mặc dù nhận xét rất sai của tôi) vì các thư mục không thể được liên kết cứng trong Linux. Nói chung, khi bạn có đệ quy vô hạn, như có thể xảy ra với các liên kết mềm, bạn sẽ nhận được một thông báo cho hiệu ứng đó, điều đó dường như không xảy ra.

Khả năng khác tôi có thể nghĩ đến là thư mục Thùng rác là một hệ thống lạ của riêng nó. Tôi thực sự không biết làm thế nào nó hoạt động, tôi không bao giờ sử dụng nó. Tuy nhiên, bạn có thể may mắn hơn khi xóa trực tiếp các tệp cấp cao nhất thay vì nhắm mục tiêu thư mục có vấn đề:

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

Bạn cũng nên thử làm trống thư mục Thùng rác khỏi GUI, chỉ cần chọn Thùng rác và nhấp vào "Thùng rác", xem nó có hoạt động không.


Cả hai đều thất bại. Câu hỏi sửa đổi.
PyRulez

@PyRulez thư mục này lớn cỡ nào? Cả kịch bản perl lẫn ý rmchí đều không tạo ra bất kỳ đầu ra nào. Họ đã chạy trong bao lâu? Tôi cũng cập nhật findlệnh, cái trước đã sai, xin lỗi. Có một cái nhìn vào câu trả lời cập nhật. Cuối cùng, chúng tôi làm việc mù ở đây. Vui lòng cập nhật câu hỏi của bạn với đầu ra của ls -lnơi bạn đã sử dụng ls, cũng hiển thị kết quả du -sch ~/.local/share/Trash/để chúng tôi biết kích thước.
terdon

Tôi không thể tìm thấy kích thước.
PyRulez

@PyRulez thử du -sch ~/.local/share/Trash/sẽ cung cấp cho bạn kích thước. Và vui lòng thêm tất cả nội dung mà các bình luận khác nhau đã yêu cầu, chúng cần thiết để chúng tôi có thể hiểu những gì đang diễn ra.
terdon

@tedron Tôi đã từng.
PyRulez

0

(Tôi tự tin rằng nó sẽ hoạt động và vì tôi sẽ đi du lịch ngay bây giờ, tôi sẽ để nó như một câu trả lời mà tôi có thể xóa trong tương lai nếu nó không hoạt động.)

  1. Đầu tiên, để an toàn, hãy chạy

    find ~/.local/share/Trash/files/devices/ -exec echo {} \;
    
  2. Thứ hai, nếu đầu ra của "1" không hiển thị bất kỳ tệp quan trọng nào, thì hãy chạy

    find ~/.local/share/Trash/files/devices/ -exec rm {} \;
    
  3. Bước cuối cùng sẽ là

    find ~/.local/share/Trash/files/devices/ -empty -type d -delete
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.