निर्देशिका को अप्रत्यक्ष रूप से स्वयं के अंदर हटाएं


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है?
टेराडॉन

भी के उत्पादन में जोड़ें ls -dli devicesऔरls -dli devices/reg-dummy/subsystem/devices/
terdon

3
पहली आज्ञा होनी चाहिए थी ls -ldi devices, नहीं device। मैं यह देखने की कोशिश कर रहा हूं कि क्या ये वास्तव में हार्ड लिंक (समान इनोड) हैं। हालाँकि, ध्यान रखें कि यदि यह एक बड़ी निर्देशिका है, rm -rfतो इसमें लंबा समय लगेगा लेकिन अंततः काम करेगा। यदि यहां समस्या परिपत्र लिंक है, तो आपको अनंत पुनरावृत्ति के बारे में एक त्रुटि संदेश मिलेगा। यदि कोई त्रुटि संदेश नहीं है, तो बस rm -rfउसका पाठ्यक्रम चलाएं।
टेराडॉन

7
@terdon: मुझे लगा कि लिनक्स (उबंटू, कम से कम) हार्ड-लिंक्ड निर्देशिकाओं की अनुमति नहीं देता है?
saiarcot895

2
मैं सिर्फ यह मान रहा हूँ कि आपने "खाली कचरा" बटन के साथ नॉटिलस की कोशिश की थी? (शायद वे इस तरह की चीजों के बारे में सोचते थे जब nautilus ^ ^ लिखते थे)
MrVaykadji

जवाबों:


3

उत्पादन के ls -ldiनिर्देशिका के इनोड संख्या दिखाएगा। यदि निर्देशिका के भीतर की निर्देशिका में वास्तव में एक ही नाम के बजाय इसके पूर्वज के समान ही इनोड संख्या है, तो आपका फाइल सिस्टम भ्रष्ट है और आपको बचाव मोड में बूट करना होगा और इसे fsck करना होगा।


1

मुझे अभी भी लगता है कि rm -rfअगर आप इसे पर्याप्त समय देंगे तो काम करेंगे, लेकिन यदि नहीं, तो इनमें से एक या दोनों को करना चाहिए:

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कम से कम उपयोग करते हैं तो आपको पता चल जाएगा कि फ़ाइलें हटा दी जा रही हैं।

वैसे भी, यह एक हार्डलिंक समस्या नहीं हो सकती (मेरी बहुत गलत टिप्पणी के बावजूद) क्योंकि निर्देशिका को लिनक्स के तहत हार्डलिंक नहीं किया जा सकता है। सामान्य तौर पर, जब आपके पास अनंत पुनरावृत्ति होती है, जैसा कि सॉफ्टलिंक के साथ हो सकता है, तो आपको उस आशय का एक संदेश मिलेगा, ऐसा प्रतीत नहीं होता है।

दूसरी संभावना मैं सोच सकता हूं कि ट्रैश फ़ोल्डर अपने आप में कुछ अजीब प्रणाली है। मैं वास्तव में नहीं जानता कि यह कैसे काम करता है, मैं इसका उपयोग कभी नहीं करता। हालाँकि, आपके पास समस्याग्रस्त निर्देशिका को लक्षित करने के बजाय सीधे शीर्ष स्तर की फ़ाइलों को हटाने से बेहतर किस्मत हो सकती है:

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

आपको GUI से ट्रैश फ़ोल्डर खाली करने का भी प्रयास करना चाहिए, बस ट्रैश का चयन करें और "खाली ट्रैश" पर क्लिक करें, देखें कि क्या काम करता है।


वे दोनों असफल रहे। सवाल संशोधित।
PyRulez

@PyRulez यह निर्देशिका कितनी बड़ी है? न तो पर्ल स्क्रिप्ट और न ही rmकोई आउटपुट देगा। वे कितने समय तक चले? मैंने findकमांड को भी अपडेट किया , पिछले एक गलत था, क्षमा करें। अद्यतन जवाब पर एक नज़र है। अंत में, हम यहाँ अंधे काम कर रहे हैं। कृपया अपने प्रश्न को उस आउटपुट के साथ अपडेट करें ls -lजहां आपने उपयोग किया है ls, du -sch ~/.local/share/Trash/इसलिए इसका परिणाम भी दिखाएं ताकि हमें पता चले ।
टेराडॉन

मुझे आकार नहीं मिला।
PyRulez

@PyRulez कोशिश है du -sch ~/.local/share/Trash/कि आपको आकार देगा। और कृपया उन सभी सामानों को जोड़ दें जो विभिन्न टिप्पणियों ने मांगे हैं, उनकी आवश्यकता है ताकि हम समझ सकें कि क्या चल रहा है।
टेराडन

@ संतान मैं।
PyRulez

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
    
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.