विंडोज में बड़े पैमाने पर फ़ाइलों को हटाने


141

मेरे पास एक निर्देशिका है, जिसमें विंडोज 2008 सर्वर पर कुछ उपनिर्देशिकाओं में ~ 3 मिलियन फाइलें हैं। मूल dir पर SHIFT + DEL के माध्यम से फ़ाइलों को मैन्युअल रूप से हटाने से उम्र लगती है। क्या किसी अन्य तरीके से तेजी से विलोपन करना है?


1
स्टैक ओवरफ्लो में यहां भी पूछा गया: stackoverflow.com/questions/186737/…
ह्यूगो

6
मैं केवल कुछ उपनिर्देशिकाओं के लिए चुंबक को कैसे लक्षित कर सकता हूं?
Jaime Hablutzel

7
@Jaime एक स्थिर प्रोग्रामर की तरह, एक वास्तविक प्रोग्रामर की तरह; ;-) xkcd.com/378
लीजनयर

यदि यह SSD ड्राइव है तो क्या होगा?
बेंजामिन वीस

जवाबों:


179

चेतावनी: यदि आपके पास निर्देशिकाओं के प्रति सहानुभूति है तो delवास्तविक निर्देशिकाओं को हटा देंगे और सहानुभूति को नहीं। इससे बहुत सावधान रहें और इन कमांड को तब तक न चलाएं जब तक आपको पता न हो कि टारगेट डायरेक्टरी के अंदर कोई सिम्बल नहीं हैं।


मुझे नियमित रूप से WinXP एन्क्रिप्टेड ड्राइव से बहुत सारी फाइलें और निर्देशिकाएं हटाने की जरूरत है, आमतौर पर 45,000 फ़ोल्डरों में 500,000 फाइलों में से लगभग 22 जीबी।

विंडोज एक्सप्लोरर के साथ हटाना बकवास है क्योंकि यह फाइलों को एन्यूमरेट करने में बहुत समय बर्बाद करता है। मैं आमतौर पर C: \ stufftodelete को हटाने के लिए आवश्यक सामान ले जाता हूं और एक deleteestuff.bat बैच फ़ाइल है rmdir /s/q C:\stufftodelete। यह रात में चलने के लिए निर्धारित है, लेकिन कभी-कभी मुझे इसे दिन के दौरान चलाने की आवश्यकता होती है, ताकि जल्दी बेहतर हो।

यहां 303 फ़ोल्डरों में 960 फ़ाइलों के एक छोटे से 5.85 एमबी नमूने के त्वरित समय परीक्षण के परिणाम हैं। मैंने पद्धति 1 को विधि 2 के बाद चलाया, फिर परीक्षण निर्देशिकाओं को रीसेट किया।

विधि 1 फ़ाइलों और निर्देशिका संरचना को एक पास में निकालता है:

rmdir /s/q foldername

मेथड 2 में फाइल को डिलीट करने के लिए एक पहला पास है और प्रत्येक सिंगे फ़ाइल के लिए स्क्रीन पर लिखने के ओवरहेड से बचने के लिए आउटपुट। एक दूसरा पास फिर शेष निर्देशिका संरचना को साफ करता है:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • विधि 1: 17.5s, 14.9s, 13.9s, 14.8s, 13.8s: औसत 14.98 सेकंड
  • विधि 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: औसत 12.82 सेकंड

यहां 3,243 फ़ोल्डरों में 19,521 फ़ाइलों में से 404 एमबी का उपयोग कर एक और परीक्षण के परिणाम दिए गए हैं:

  • विधि 1: 2 मिनट 20 सेकंड
  • विधि 2: 2 मिनट 33 सेकंड

तो इसमें बहुत कुछ नहीं है, शायद एक परीक्षण पर न्यायाधीश के करीब भी।


संपादित करें: मैं बहुत अधिक डेटा के साथ सेवानिवृत्त हुआ हूं, यह मेरे लिए एक विशिष्ट मामला है: 146,990 फ़ोल्डरों में 1,159,211 फ़ाइलों में से 28.3 जीबी:

  • विधि 1: 2h 15 मीटर, 2h 34 मीटर: औसत: 2 घंटे 25 मिनट
  • विधि 2: 49 मीटर, 57 मीटर: औसत: 53 मिनट

वाह, विधि 2 विधि 1 की तुलना में लगभग तीन गुना तेज है! मैं अपने विलोपन अद्यतन कर रहा हूँ।


RD / S / Q महान कार्य करता है यदि आप एक पूर्ण पथ निर्दिष्ट करते हैं, लेकिन यह सापेक्ष पथों के साथ काम करते समय नहीं होता है। क्या कोई हल है?
माइकल एस।

1
@ ह्यूगो: ह्यूगो, एक प्रश्न: उपरोक्त समय परीक्षणों में, या तो दोनों तरीकों के लिए, क्या आपने विधि को चलाने से पहले तुरंत फाइलों की गिनती की? मैं पूछ रहा हूं क्योंकि फ़ोल्डर की सामग्री पहले से ही ओएस फ़ाइल कैश में हो सकती है। धन्यवाद!
विलियम सी।

@WilliamC: मुझे ठीक से याद नहीं है, लेकिन एक ही सामग्री के साथ बार-बार हटाए जाने से पहले मैं केवल एक डिलीट से पहले ही गिना जाऊंगा, और दूसरे डिलीट के लिए इसे दोहराया नहीं होगा (जैसा कि मुझे पहले से ही पता था)।
ह्यूगो

1
Rmdir और del दोनों विफल होते हैं जब इसमें 256 वर्णों से अधिक लंबे मार्ग होते हैं।
निकोलई एहमैन

1
चेतावनी: यदि आपके पास निर्देशिकाओं के प्रति सहानुभूति है तो delवास्तविक निर्देशिकाओं को हटा देंगे और सहानुभूति को नहीं। इससे बहुत सावधान रहें और इन कमांड को तब तक न चलाएं जब तक आपको पता न हो कि टारगेट डायरेक्टरी के अंदर कोई सिम्बल नहीं हैं।
user0103

18

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

echo Y | format Z: /FS:NTFS /X /Q

जहां Z: आपका 'अस्थिर' विभाजन है। नोट: विभाजन में कोई लेबल नहीं होना चाहिए। मैंने यहाँ इस बारे में ब्लॉग किया है


और डिस्क और निर्देशिका के बीच संबंध बनाने के लिए एक हार्डलिंक का उपयोग करें जहां फ़ाइलों को संग्रहीत किया जाता है यदि सटीक निर्देशिका पथ की आवश्यकता होती है।
नीम मेघ

1
@NimeCloud: हार्डलिंक फाइल सिस्टम या लिंक निर्देशिकाओं को पार नहीं कर सकता है।
ग्रैविटी

5
हालांकि, प्रतीकात्मक लिंक फाइल सिस्टम और लिंक निर्देशिकाओं को पार कर सकते हैं , इसलिए वे यहां उपयुक्त हो सकते हैं। Mklink कमांड देखें (विस्टा और बाद में; अन्यथा मार्क रोसिनोविच / SysInternals से जंक्शन का उपयोग करें।)
रॉबर्ट कैलहॉन

9

कमांड प्रॉम्प्ट में (प्रारंभ -> रन -> cmd):

del /f /s /q foldername 

यह बहुत अच्छा है क्योंकि यह सूचीबद्ध करता है कि इसकी डिलीटिंग क्या है .. लेकिन इसकी गति के मामले में rd जैसी ही है।
bobobobo

1
ऊँ ऊँ ऊँ ऊँ ऊँ। जितना मैंने सोचा था उतना अच्छा नहीं है। यह फ़ाइलों को जल्दी से हटा देता है लेकिन निर्देशिका ट्री को बरकरार रखता है।
बोबोबोबो

1
जो मैं जोड़ सकता हूं वह rd का उपयोग करके खाली करने में काफी लंबा समय लेता है।
बोबोबोबो

3
@bobobobo मैंने ~ 30GB / 1,000,000 फ़ाइलों / 15,000 फ़ोल्डरों के साथ कुछ परीक्षण किए और del + rd सिर्फ rd की तुलना में लगभग तीन गुना तेज है: superuser.com/questions/19762/mass-de
Hugo

1
यह विफल हो जाएगा यदि पाथनाम 256 चरचरों से अधिक लंबा है।
निकोलई एहमैन

7

बहुत तेज़ी से (अपने स्वयं के एपीआई का उपयोग करके) फ़ाइलों की प्रतिलिपि बनाने / आगे बढ़ने के अलावा, TeraCopy फ़ाइलों को हटा सकता है और यह बहुत तेज़ है। जब से TeraCopy का पता चला है, मैं इसे स्थापित किए बिना कंप्यूटर का उपयोग नहीं करता (यदि मैं कॉपी / स्थानांतरित / हटाने वाला हूं)।

वही इंस्टॉलर x64 संस्करण स्थापित करता है लेकिन इसका उपयोग करने के लिए आपको इसे मैन्युअल रूप से मजबूर करना होगा।

बीटा जो मैं स्थिर संस्करणों पर सुझाता हूं: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


क्या आपने कभी TeraCopy बनाम rmdir या del या del + rmdir की तरह कुछ-के-साथ-समय की तुलना की है?
ह्यूगो

1
@ ह्यूगो: बेवकूफ सवाल। मैं TeraCopy की सिफारिश नहीं करता अगर यह सादे आंखों से देखा नहीं था यह तेज है!
रटामाइक्का

5
तो क्या आप अनुमान लगाते हैं कि यह 10% तेज है? दो बार उपवास के रूप में? दस गुना तेज? एक लाख गुना तेज? यह बहुत अच्छा होगा अगर आप इसे दो बड़े और समान टेस्ट सेट के साथ rmdir के खिलाफ समय दे सकते हैं।
ह्यूगो

1
धन्यवाद! मैं वर्षों से TeraCopy का उपयोग कर रहा हूं, लेकिन मास-डिलीट फ़ंक्शन के बारे में कभी नहीं पता था। और तुम सही हो, यह बहुत है, बहुत तेजी से!
आजादयोन

1
@ ऐमलगोविनस तुम नहीं। आप या तो प्रोग्राम खोलते हैं और ड्रैग-ड्रॉप या राइट-क्लिक के माध्यम से फ़ाइलें / फ़ोल्डर जोड़ते हैं, या एक्सप्लोरर / डेस्कटॉप पर अपनी फ़ाइलों / फ़ोल्डरों को राइट-क्लिक करते हैं। एक बार जब उन्हें चलना हो जाए, तो आप चाहें तो 'डिलीट' और 'मूव टू रिसाइकल बिन' पर क्लिक करें, लेकिन मैं 'डिस्क से डिलीट' का पक्ष लेता हूं। हालाँकि, आपको TeraCopy को बूट करने की आवश्यकता होगी, यह मानने के लिए कि यह डेस्कटॉप / एक्सप्लोरर में राइट-क्लिक करें, यदि यह डिफ़ॉल्ट रूप से नहीं हुआ है।
rautamiekka

6

मैंने एक बैट फाइल की थी जो वही करती है।

@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T

यह दो चरणों में काम करता है, एक, यह फ़ाइलों को हटाने का प्रयास करता है। और दूसरा फाइलों का स्वामित्व लेने की कोशिश करना है। y को आपके स्थानीय (अंग्रेजी में हां के लिए स्टैंड) के अनुसार बदला जाना चाहिए। यदि कार्य विफल हो जाता है (उदाहरण के लिए यदि विफल क्योंकि अनुमति) तो आपको इसे फिर से चलाना होगा। हालाँकि, दूसरा राउंड पहले राउंड में डिलीट हुई फाइल्स को डिलीट करने की कोशिश नहीं करेगा, इसलिए यह बहुत जल्दी हो सकता है।


इसे कैसे उपयोग करे। एक पथ मार्ग में delfolder.bat के रूप में सहेजें (उदाहरण के लिए c: \ windows), फिर इसे इस रूप में चलाएँ

 delfolder "foldername"   

जहां foldername फ़ोल्डर का नाम है

मेरे परीक्षण में, 123'000 फ़ाइलों को हटाने में 3 मिनट (sata 7200rpm) लगे। वाह!


1
आमतौर पर आपको %1एक स्क्रिप्ट में उपयोग नहीं करना चाहिए , लेकिन "%~1"। इस तरह, अगर तर्क को उद्धरणों के साथ पारित किया गया है, तो इसे हटा दिया गया है और आवश्यक है। यदि इसे उद्धरणों के साथ पारित नहीं किया गया है, तो इसे उद्धृत किया जाता है।
बेनोइट

4

नीचे दिए गए कोड का उपयोग करना आमतौर पर मेरे लिए अच्छा काम करता है।

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe

उस रोबोकॉपी कॉल के अंत में एक `> nul` जोड़ें ताकि आपको इसे ऑनस्क्रीन देखने की जरूरत न पड़े।
जोशमैड

यह rsyncलिनक्स में उपयोग के समान है । यह यहाँ भी तेज है rmdir?
हस्तुर

FYI करें, यह रोबोकॉपी del /f/q/s+ से बहुत अलग है rmdir /s/q। अगर आपके dir_to_wipe के पास आपके लिए जंकशन हैं, c:\some_important_dirतो आपका डेटा खत्म हो जाएगा।
पावेल पी।

@Pavel तो जंक्शन बिंदुओं और प्रतीकात्मक लिंक को बाहर करने के लिए / XJ का उपयोग करें?
बर्नहार्ड

इसने ~ 36GB निर्देशिका के लिए चाल चली जिसमें सैकड़ों निर्देशिकाएं और फाइलें थीं जो 256 वर्णों के डेल / rmdir "विधि" को बुरी तरह से विफल करने के लिए थे। इस सेकंड में, विंडोज एक्सप्लोरर HOURS का अनुमान लगा रहा था!

3

कमांड प्रॉम्प्ट से rd / s कमांड का उपयोग करें ।


2
नहीं। यह एक्सप्लोरर से हटाने जितना धीमा है।
बॉबोबोबो

खैर, ठीक है। वैसे भी डेल / एफ / एस / क्यू से बेहतर काम करता है।
बोबोबोबो

3
खैर, यह वास्तव में हटाने के लिए एक्सप्लोरर का उपयोग करने से बेहतर है। यह हटाना जारी है, भले ही एक या दो विफल हो जाएंगे (जहां एक्सप्लोरर चोक और
एबॉर्ट्स

2

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

मुझे पूरा यकीन है कि उन सभी फ़ाइलों को हटाने के लिए आवश्यक समय कार्य की एक अंतर्निहित आवश्यकता है, हटाने के कार्यान्वयन में अक्षमता नहीं।


1

Cygwin स्थापित करें और rm -r का उपयोग करें । लेकिन यह अधिक होने की संभावना है।


यह बिल्कुल वैसा ही है rd /q /s...
जॉय

बहुत अधिक कार्य, और लगभग बराबर गति!

1
यह कई अन्य इंस्टॉल-टूल-एक्स-एंड-यूज़-इट से इसका उत्तर देने से भी बदतर नहीं है और अगर वे नहीं हो रहे हैं तो उन्हें वोट नहीं दिया जाना चाहिए।
JdeBP

2
क्या rmवास्तव में cygwin cmd.exe बिल्टिन जितना तेज़ है rd? क्योंकि पॉज़िक्स इंटरफ़ेस का साइबरविन एमुलेशन धीमा है क्योंकि इसमें कुछ अतिरिक्त काम करने की आवश्यकता होती है, जो rmवास्तव में सराहना नहीं करता है।
जन हडेक

हटाने के लिए फ़ाइलों के एक बड़े संग्रह की प्रतीक्षा करते समय मेरे पास Cygwin स्थापित करने और प्रयास करने के लिए पर्याप्त समय था rm -rf। लगभग 10 मिनट मैंने गर्भपात किया और वापस चला गया del /f/s/qक्योंकि साइगविन के तहत डिस्क का उपयोग केवल 50% था। के तहत del, डिस्क उपयोग 100% आंकी गई है। इसलिए मुझे लगता है कि इसे तेजी से हटाना चाहिए। दोनों तरीकों के लिए CPU उपयोग <1% है। मुझे फ़ाइल संख्या पर यकीन नहीं है क्योंकि मैंने 10 मिनट की गणना करने के बाद विंडोज फ़ाइल डीलेटर को बंद कर दिया था।
डेरेक ज़ीम्बा

1

क्या आपके पास लघु फ़ाइल नाम पीढ़ी सक्षम है? यदि हां, तो क्या आपको वास्तव में इसकी आवश्यकता है? किसी फ़ाइल को निकालना केवल मेटाडेटा अस्पष्टता है। इसलिए यदि आपको निकालने के लिए नामों की संख्या दोगुनी हो गई है, तो काम की मात्रा काफी अधिक है।


0

क्या आपने इन दोनों ऐप्स में से कोई भी आज़माया है?

यदि आप सबसे तेज़ प्रदर्शन चाहते हैं, तो ओवरराइट्स की संख्या को 0 पर सेट करना सुनिश्चित करें। विकल्पों पर क्लिक करके ऐसा करें फिर मूल्य को संवाद के नीचे बदलें।

स्रोत फ़ील्ड में हटाने के लिए पथ दर्ज करें और फिर हटाएँ पर क्लिक करें।

ये ऐप्स रीसायकल बिन में फाइलें नहीं डालते हैं। देखभाल के साथ उपयोग करें।


0

यह पहले से उल्लेख किए गए उत्तरों में उठाए गए कदमों की प्रशंसा करने और उन्हें बढ़ाने के लिए प्रदान किया गया है।

ऊपर दिए गए दो तरीके काफी प्रभावी लगते हैं, लेकिन यह निर्धारित करने के लिए कि जब तक वे सटीक समान शर्तों के विरुद्ध नहीं होंगे, तब तक प्रदर्शन मुश्किल होगा:

  • भौतिक हार्ड ड्राइव डिवाइस और मॉडल
    • अधिमानतः, ATTO / क्रिस्टल डिस्क उन पर डेटा क्लोन करने से पहले बेंचमार्क किया गया
  • एक ही विभाजन / मात्रा स्थान और ज्यामिति
    • ऐसा करने का तरीका नमूना विभाजन / फ़ोल्डरों को डीफ़्रैग कर देगा और उन्हें क्लोन कर देगा क्योंकि वे 2 बिल्कुल उसी प्रकार के हार्ड ड्राइव हैं (पिछले चरण से)
  • फिर बैच फ़ाइल के माध्यम से कॉन्फ़िगरेशन निष्पादित करें और लॉग इन करने और उनके प्रदर्शन को मापने के लिए पॉवर्सशेल सीमलेट का उपयोग करें।

    • आदर्श रूप से, इसी तरह की गतिविधि की पुनरावृत्ति के कारण किसी भी कैशिंग पक्षपात को रोकने के लिए कुछ तंत्र जोड़ें।
  • निम्नलिखित कुछ सैंपल फ़ोल्डर (कुल आकार के नाम) हैं, जिन पर मैंने प्रयोग किया था, लेकिन कोई निर्णायक प्रदर्शन / परिणाम प्राप्त करने में सक्षम नहीं था।

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • मैंने आउटपुट लॉग फ़ाइलें पोस्ट की होंगी, लेकिन मेरा मानना ​​है कि फ़ोल्डर फ़ाइलों आदि के आकार और वितरण के कारण विचरण बहुत बड़ा है।

शक्ति कोशिका:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt

नाम> 256 वर्णों के साथ विफल

0

ह्यूगो का उत्तर सबसे तेज़ है लेकिन यह पहले पास में छिपी या सिस्टम फ़ाइलों को नहीं हटाता है, इसलिए यदि आप अधिक पूर्ण समाधान चाहते हैं तो पैरामीटर / a का उपयोग करें:

del /f /s /q /a foldername > nul
rmdir /s /q foldername

Magallanes द्वारा BAT फ़ाइल के बारे में , टेकऑन और आइकल्स के साथ बहुत सावधानी बरतें, हार्डलिंक समान अनुमतियों और स्वामियों को साझा करें, इसलिए यदि आप जिस फ़ोल्डर को हटाना चाहते हैं, उसमें असंतृप्त हार्डलिंक हैं, तो टेकऑफ़ और आइकल्स का उपयोग करके अनुमतियाँ और फ़ाइलों के मालिकों को बदल दिया जाएगा। फ़ोल्डर।

उपकरण ln.exe का उपयोग करके आप फ़ोल्डर के अंदर हार्डलिंक की गई सभी फाइलों को सूचीबद्ध कर सकते हैं और यह जान सकते हैं कि क्या वे फ़ोल्डर के बाहर फाइलों में हार्डलिंक किए गए हैं (असंतृप्त हार्डलिंक):

ln.exe --enum foldername > HardlinksList.txt

-1

कई फ़ाइलों को हटाने की तुलना में फ़ोल्डर हटाना अधिक तेज़ है।

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


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

5
आपको यह विचार कहां से मिलता है कि किसी फ़ोल्डर को हटाना फ़ाइलों को हटाने के मुकाबले तेज़ है? एक फ़ोल्डर हटाया जा रहा है सभी फाइलों को नष्ट करने के लिए अपने पहले कदम के रूप में शामिल है में उस फ़ोल्डर, तो यह तेजी से नहीं हो सकता। रीसायकल बिन पर जाना एक पूरी तरह से अलग मामला है, हालांकि, लेकिन यह सवाल यहां नहीं है।
जॉय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.