अनाथ फ़ाइलों और छवियों को कैसे खोजें जो किसी सीएसएस स्टाइलशीट से या किसी नोड से लिंक नहीं हैं?


21

क्या सभी अप्रयुक्त फ़ाइलों को सूचीबद्ध करने का एक तरीका है जो सार्वजनिक फ़ाइल सिस्टम के अंदर और एक थीम डायरेक्टरी के अंदर रहते हैं और उन्हें सूचीबद्ध करते हैं, या शायद उनके पास स्वचालित रूप से हटाने का विकल्प भी है?

मेरा मतलब उन फाइलों से है जो वर्तमान में किसी सीएसएस स्टाइलशीट या किसी भी नोड से नहीं जुड़ी हैं।


मुझे इसका उत्तर जानना है, प्रश्न पोस्ट करने के लिए धन्यवाद!
NPC

क्या आप फ़ील्ड के साथ अपलोड की गई फ़ाइलों (जैसे ImageField) या सामान्य रूप से फ़ाइलें (IMCE के माध्यम से अपलोड) का जिक्र कर रहे हैं? मुझे नहीं लगता कि आप संदर्भ के लिए प्रत्येक नोड बॉडी को खोजे बिना IMCE अपलोड ट्रैक कर सकते हैं।
चुलकी

हां, मैं IMCE के माध्यम से अपलोड कर रहा हूं। मैं उम्मीद कर रहा था कि एक मॉड्यूल है जो आपने क्या कहा: छवि संदर्भ खोजने के लिए नोड्स को स्कैन करें, फिर आंतरिक ड्रुपल संदर्भों के लिए (डोमेन के बिना) प्रासंगिक निर्देशिकाओं को स्कैन करें और अप्रयुक्त फ़ाइलों को खोजने के लिए दोनों की तुलना करें। टूटे हुए लिंक को खोजने के लिए मौजूदा मॉड्यूल में लिंक के साथ शायद कुछ ऐसा ही किया जाता है। इसलिए मैंने सोचा कि शायद इसी तरह के मॉड्यूल छवियों के लिए मौजूद हैं, लेकिन शायद नहीं ..
कैमकैम

जवाबों:


14

आप निम्न MySQL क्वेरी चलाकर अनाथ फ़ाइलों को पा सकते हैं:

SELECT fm.*
FROM file_managed AS fm
LEFT OUTER JOIN file_usage AS fu ON (fm.fid = fu.fid)
LEFT OUTER JOIN node AS n ON (fu.id = n.nid)
WHERE fu.type = 'node' AND n.nid IS NULL

यह उन सभी फाइलों को लौटाता है जिनमें कोई संबद्ध नोड नहीं है। मुझे यकीन नहीं है कि अगर लौटी पंक्तियों और फ़ाइलों को हटाना सुरक्षित है, तो शायद यह आपके मॉड्यूल सेटअप पर भी निर्भर करता है। केवल अपने जोखिम पर उपयोग करें!

स्रोत: http://drupal.org/node/733258#comment-5582764


5
आप अपनी पोस्ट को COPIED ORIGINAL पोस्ट से लिंक साझा कर सकते थे ....... drupal.org/node/733258#comment-5582764 मुझे लगता है कि यह स्रोत दिखाना बहुत ही अनैतिक है।
Sk8erPeter 13

आपके द्वारा ऊपर पोस्ट किए गए लिंक के बाद, मुझे भी लगता है कि drupal.org/node/733258#comment-7427898 में कोड उपयोगी है क्योंकि यह डेटाबेस में अनाथ फ़ाइलों और उनकी संबंधित प्रविष्टियों दोनों को हटा देगा।
मार्कोस बुर्के

दरअसल, @ Sk8erPeter, उत्तरों में जानकारी समेटना और फिर उससे लिंक करना उचित है। खासकर यदि वे स्टैक एक्सचेंज के बाहर एक स्रोत से आते हैं।
क्रिस्टिया

1
@Christia, अगर आपने इसे संपादित करने से पहले मूल पोस्ट पढ़ी (मैंने उत्तर में लिंक डाल दिया), तो आप देख सकते हैं कि डेविड ने किसी अन्य के टिप्पणी शब्द को अपने स्रोत का उल्लेख किए बिना और पोस्ट के चारों ओर एक उद्धरण चिह्न डालकर कॉपी किया है। इसे साहित्यिक चोरी माना जा सकता है, यही मेरी टिप्पणी थी। :)
Sk8erPeter

आप पाएंगे कि इससे बचने के लिए मैंने कुछ डुप्लिकेट फ़ाइल आईडी का निर्माण किया है, इससे बचने के लिए और मेरे द्वारा एक समूह को जोड़े गए डुप्लिकेट की एक संख्या जोड़ें। Fm का चयन करें। 'नोड' और n.nid क्या पूरा समूह fm.fid द्वारा है;
कैमरून

5

तीन साल बाद इस पोस्ट पर आने वाले लोगों के लिए, एक छोटा मॉड्यूल है जिसे आप फैंसी फाइल डिलीट करने के लिए उपयोग कर सकते हैं ।

इस पोस्ट के समय, यह बीटा में है, इसलिए इसे अपने जोखिम पर उपयोग करें। हमेशा की तरह, डीबी प्रश्नों के माध्यम से किसी भी चीज़ को अनाथ करना सफाई हो सकता है और इसकी सफलता आपके विशेष मॉड्यूल सेटअप पर बहुत अधिक निर्भर करती है।


मुझे यह मॉड्यूल बहुत छोटी लग रहा था - उस बिंदु पर जहां यह बेकार था। YMMV।
फेलिक्स ईव

3

ऐसा कुछ जो " फ़ाइलों को पहचानने में मदद कर सकता है जो अब नोड्स या फ़ाइलों और निर्देशिका से जुड़ी नहीं हैं जो फ़ाइल प्रबंधित तालिका में नहीं हैं " (जैसा कि डुप्लिकेट प्रश्न में " अप्रयुक्त फ़ाइलों को हटाने के लिए कैसे करें? "), का उपयोग करना है? फ़ाइल चेकर मॉड्यूल। इसके बारे में कुछ विवरण, इसके परियोजना पृष्ठ से:

एक संपूर्ण Drupal दुनिया में आपका सर्वर फाइल सिस्टम और Drupal की फाइल टेबल में इसकी एनकोडिंग प्रविष्टियाँ 100% सिंक्रनाइज़ हैं। लेकिन क्या होगा अगर कुछ डिस्क विफलता के कारण आपकी फ़ाइल प्रणाली के कुछ भाग दूषित हो गए हों? या आपके किसी मॉड्यूल ने आपके डेटाबेस और फाइलों को गड़बड़ कर दिया है? या आपकी तैनाती स्क्रिप्ट अगल हो गई? ठीक है, तो यह मॉड्यूल आपको मॉनिटर करने और यह पता लगाने में मदद करेगा कि कौन सी फाइलें सिंक से बाहर हैं।

बॉक्स में से फ़ाइलों की तालिका में दो प्रकार की स्थितियाँ होती हैं: अस्थायी (0) और स्थायी (1)। फ़ाइल चेकर एक अतिरिक्त स्टेटस मिसिंग (2) का परिचय देता है। सत्यापन प्रक्रिया के दायरे में जिसे विभिन्न तरीकों से ट्रिगर किया जा सकता है, फाइल टेबल का स्टेटस कॉलम अपडेट किया गया है।

विशेषताएं

  • सत्यापन प्रक्रिया को चलाएं: मांग पर, क्रोन के माध्यम से, ड्रश के माध्यम से (योजना में)
  • फ़िल्टर के साथ फ़ाइल सूची अवलोकन पृष्ठ
  • दृश्य एकीकरण
  • फ़ाइल जाँच के लिए ड्रश कमांड

यदि आप किसी दृश्य के परिणामों को निर्यात करना चाहते हैं, तो वह view_data_export मॉड्यूल का उपयोग करने के लिए अनुशंसित है।

तो आप क्या कर सकते हैं ऐसा है:

  • अपनी साइट को कुछ देव वातावरण में क्लोन (कॉपी) करें, लेकिन उस निर्देशिका की किसी भी फाइल को कॉपी न करें जिसे आप चेक करना चाहते हैं। भिन्नता के रूप में (यदि यह सवाल एक गैर-उत्पादन स्थिति साइट के बारे में है), बस उस निर्देशिका से सभी फ़ाइलों को अस्थायी रूप से स्थानांतरित करें।
  • फ़ाइल परीक्षक मॉड्यूल का उपयोग करके पता करें कि कौन सी फाइलें "गायब" हैं: ये ऐसी फाइलें हैं जो स्पष्ट रूप से अप्रयुक्त नहीं हैं । लेकिन इस मॉड्यूल के बारे में बहस नहीं करने वाली कोई भी फाइल ... अप्रयुक्त है!
  • निर्देशिका के सही स्थान पर सभी गुम फाइलों को कॉपी करके, जिसे आप जांचना चाहते हैं, तब आप चरण-दर-चरण अपनी निर्देशिका की एक संपूर्ण सामग्री को फिर से बनाते हैं।

नोट : भले ही यह प्रश्न D7 के बारे में है, लेकिन इसका (alfa) संस्करण D8 के लिए भी है।


मेरी समस्या को हल करने के लिए बहुत उपयोगी दृष्टिकोण
kb8

2

एक मॉड्यूल है जो अवांछित फ़ाइलों को हटाता है फैंसी फ़ाइल हटाएं

वीबीओ कस्टम क्रियाओं के माध्यम से उन्हें हटाने के लिए एक विकल्प के साथ सभी प्रबंधित फ़ाइलों को देखें FID द्वारा प्रबंधित फ़ाइलों को मैन्युअल रूप से हटाने (और यदि आप वास्तव में चाहते हैं तो हटाने के लिए मजबूर करने का एक विकल्प)। फ़ाइल प्रबंधित तालिका में नहीं हैं डिफ़ॉल्ट फ़ाइलों निर्देशिका से अप्रयुक्त फ़ाइलों को हटाना। AKA सभी अप्रबंधित फ़ाइलों को हटा रहा है। संपूर्ण इंस्टॉल से अप्रयुक्त फ़ाइलों को हटाना जो अब नोड्स और फ़ाइल उपयोग तालिका से जुड़ी नहीं हैं। AKA सभी अनाथ फ़ाइलों को हटा रहा है।


1
मुझे बड़े पैमाने पर संचालन और vbo मॉड्यूल के साथ एक बुरा अनुभव है। प्रारंभ में मैं पियरे द्वारा सुझाए गए दृष्टिकोण की तरह उपयोग करूंगा। वेरीन्स के बाद, मैं आपके सुझाव मॉड्यूल का उपयोग फाइलों की निर्देशिका को साफ रखने के लिए करूंगा।
kb8

0

आप अप्रयुक्त फ़ाइल को हटा सकते हैं

  1. फ़ाइल क्वेरी से मैन्युअल रूप से हटाएं , जैसे कुछ क्वेरी द्वारा

    $this->database ->delete('file_managed') ->condition('fid', $fid, '=') ->execute();

  2. फ़ाइल 0 की स्थिति निर्धारित करना , चिह्नित करना अस्थायी फ़ाइल के रूप में है, इसलिए निश्चित समय के बाद क्रोन इसे हटा देगा।
    $file = File::load ($fid); $file->setTemporary();


0

फैंसी फ़ाइल को नष्ट मॉड्यूल मेरे लिए सब पर काम नहीं किया। यहां अधिक मैनुअल विकल्प है।

एक फ़ोल्डर से फ़ाइलों को हटाने के लिए जो आप प्रबंधित फ़ाइल तालिका में नहीं हैं:

1) सभी प्रबंधित फ़ाइलों की एक सूची बनाएँ:

mysql whateverdb -e "select filename from file_managed" > ~/managed-files.txt

2) एक निर्देशिका से सभी फ़ाइलों को हटा दें जो उस सूची में नहीं हैं। ऐसा करने के लिए मैंने एक छोटी सी बैश स्क्रिप्ट का उपयोग किया:

#!/bin/bash

IMG_FOLDER='/var/www/html/yoursite/docroot/sites/default/files/certain-images'
EXCLUDES='/home/yourhomeuser/managed-files.txt'

for FILE in $IMG_FOLDER/*; do
  if ! grep "$FILE" "$EXCLUDES"; then
        echo "Deleting $FILE"
        rm -f "$FILE"
  fi
done

आप जिस IMG_FOLDERभी फोल्डर से फाइल्स को हटाना चाहते हैं (और अपनी अपवर्जित फाइल के लिए पथ को अपडेट करें) के रास्ते में परिवर्तन करें

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