Windows'ta büyük miktarda dosyayı silmek yavaş


34

Bir NTFS diski olan bir Windows XP kutum var ve büyük miktarda dosyayı silmek çok yavaş. Klasörler ağacında çok sayıda dosya içeren bir klasör seçip sildiğimde (geri dönüşüm kutusunu kaydetmek için shift-del kullanarak), klasörün içindeki klasörlerin sayısıyla doğrudan orantılı gibi göründüğü zaman alır. onay kutusunu açar. Daha sonra klasördeki her bir dosyayı silmek daha uzun sürüyor.

Windows'ta bir klasörü silmenin ve içindeki dosya sayısıyla orantılı bir zaman geçirmemenin bir yolu var mı?


Yanıtlar:


60

Windows'ta bir klasörü silmenin ve içindeki dosya sayısıyla orantılı bir zaman geçirmemenin bir yolu var mı?

Sanmıyorum, ancak bazı yöntemler açıkça diğerlerinden daha hızlı.

En kötü yol, Geri Dönüşüm Kutusu'na göndermektir: hala silmeniz gerekir. Bir sonraki en kötü durum Windows Gezgini ile shift + delete: herhangi bir şeyi silmeye başlamadan önce içeriğini kontrol etmek çok zaman harcıyor.

Bir sonraki en iyi rmdir /s/q foldernamekomut satırından kullanmaktır . del /f/s/q foldernamebu da iyidir, fakat dizin yapısının gerisinde kalır.

Bulduğum en iyisi, her bir tekli dosya için ekrana yazma ek yükünü engellemek için dosyaları ve çıktıları silmek için ilk geçişi olan iki satırlık bir toplu iş dosyasıdır. İkinci bir geçiş daha sonra kalan dizin yapısını temizler:

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

Bu, Windows XP şifreli bir diskle yapılan zaman testlerine dayanarak, ~ 30GB / 1.000.000 dosya / 15.000 klasör silerek, tek bir rmdir'den neredeyse üç kat daha hızlıdır: rmdir~ 2.5 saat del+rmdirsürer, ~ 53 dakika sürer. Daha fazla bilgi burada .

Bu benim için normal bir iştir, bu yüzden genellikle silmem gerekenleri C: \ stufftodelete'e taşırım ve bu del+rmdirkomutları bir deletestuff.bat toplu iş dosyasında kullanırım. Bu gece çalıştırmak planlanıyor, ama bazen gün boyunca çalıştırmak gerekir, bu yüzden daha hızlı daha iyi.


Dahil etme için oy> nul
Nuktu

1
Windows, eski bir SDK yedeklemesinden binlerce dosyayı taramak için beni bekletecekti. En az bir saat sürecek, bu benim durumumda 10 dakika olabilir. Tekrar kullanım için bir yarasa dosyasına koydum: gist.github.com/DavidEdwards/61d4d336232284b33b237b04da5bfe10
Knossos


1

Windows'ta bir klasörü silmenin ve içindeki dosya sayısıyla orantılı bir zaman geçirmemenin bir yolu var mı?

Evet, bölümü biçimlendirin. Geçen 9 yılda kimsenin bunu önermediğine şaşırdım.

Oldukça radikal, ancak bunu belirli bir klasör için sık sık yapmayı düşünüyorsanız, bunun için ayrı bir bölüm oluşturmaya değecektir.


Bu çok radikal olursa, diğer cevaplar tek umudunuz. Neden serverfault üzerinde iyi bir açıklama var . Linux ve XFS dosya sistemleri içindir, ancak aynı mantık burada da geçerlidir. Yerleşik işletim sistemi işlevlerinde pek bir şey geliştiremezsiniz.

Bununla birlikte, silmek istediğiniz tüm dosyalara giden yolları biliyorsanız, dizin içeriğini listeleyen aramalara kaydedebilir ve doğrudan gidererek arama yapabilirsiniz. Yine de dosya sayısıyla orantılı.

Şahsen, programın ölmediğinden emin olmak için ilerleme raporlarından bazılarını seviyorum. Bu yüzden bir şey python ile silmek istiyorum. Örneğin, tüm dosyalar alt dizinleri olmayan tek bir dizindeyse:

import tqdm
import sys
import os

location = sys.argv[1]
directory = os.fsencode(location)

with os.scandir(directory) as it:
    for dir_entry in tqdm.tqdm(it):
        try:
            os.remove(dir_entry.path)
        except OSError:
            pass  # was not a file

Bu, 12 yaşındaki SEAGATE ST3250620NS cihazımda yaklaşık 250 dosya / saniye siler. Sürücünüzde çok daha hızlı olacağını varsayardım.

Ancak, bu noktada sadece mikro optimizasyon, yani bir dizinde milyonlarca dosya bulunmadığı sürece pek bir şey yapmayacak. (benim gibi, lol, ben ne yaptım D :)


0

Kur gnutools for windowsve çalıştır:

find YOURFOLDER -type d -maxdepth 3 | xargs rm -Rf

0

Dosyaları buluta yedeklemediğinizden ve aynı anda silmeye çalıştığınızdan emin olun!

Pek çok bulut yedekleme çözümüyle dosyalar yedeklenirken kilitlenir ve yedeklenmelerini beklemeniz gerekir.

Bu sorunu temp dizini (ya da yedeklenmesi gerekmeyen bir şey) olarak adlandırıyorsanız, yedekleme dizininizde temp dizininin seçilmediğinden emin olun.


0

Birkaç dizin katmanına sahip klasörlerin, Pencere'nin bunları hızlı bir şekilde kaldırma özelliğini gerçekten yavaşlatma eğiliminde olduğunu buldum. Her zaman silinmesi gereken bir canavar olan node_modules klasörüne ulaşmanın 5 seviyeli olduğu bir proje üzerinde çalışıyordum.

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

Bu durumda ne yapıyorum, node_modules klasörüne veya her hangi bir dizinin en derin seviyesine gidip, bir seferde bir düzine kadar dizini seçip silmeye başladım. Birden fazla silme işlemi gerçekleşirse, bu Geri Dönüşüm Kutusu'nu, kullandığına inandığım tek iş parçacığı yerine paralel işlemlerde çalışmaya zorlar, işlemi önemli ölçüde hızlandırır.

En derin rehberim boşaldığında birkaç seviyeye çıkıp aynı şeyi yapıyorum. Bu beni bir saatten birkaç dakikaya götüren silme işlemlerini kesti.

Bu çok manuel bir süreçtir ve büyük bir başarı ile kodlanmış olabilir, ama benim için çalıştı.


0

NPM projelerini silerken kullandığım bir .bat dosyası oluşturmak için Hugo'nun orijinal cevabını kullandım. Bir yol değişkeni ekledim ve yolu yalnızca bir kez kopyalayıp yapıştırmak zorunda kaldım. .Bat dosyasını çift tıklatın ve tüm işi yapar - her şeyi yazmaya gerek yok.

set path="FOLDER_PATH"
del /f/s/q %path% > nul
rmdir /s/q %path%

Örnek kullanım:

set path="C:\Projects\My React Project"
del /f/s/q %path% > nul
rmdir /s/q %path%

-2

komut istemini kullanmayı denediniz mi

rmdir /s /q foldername

GUI'lerdeki tüm büyük dosya işlemleri yavaş - çünkü görsel geri bildirimin (ilerleme çubuğu) defalarca yeniden yazılması gerekiyor


5
Bu saçmalık. İşlem yavaş olabilir, çünkü GUI gereken süreyi tahmin etmek için tüm dosyaları saymaya ihtiyaç duyar, ancak yeniden boyama nedeniyle değildir.
Bender

yanlış ... Sürekli olarak büyük klasörlerle çalışıyorum (çoğunlukla win2k sunucusu) ve malzemeleri taşımak / kopyalamak / silmek için TotalCommander kullanıyorum. TC’yi küçültürseniz veya TC uygulamalarının üzerine başka bir uygulama penceresi koyarsam en az% 50 daha hızlı bir şekilde yapıldığını fark ettim. TC hala vizal şeyleri yeniden boyayor, ama her şey kompozisyonda yok
sayılıyor

6
Bilgisayarınız GUI işlemlerinin disk G / Ç performansını etkileyecek kadar yavaş mı? Yoksa TotalCommander sadece inanılmaz derecede kötü kodlanmış mı? Disk CPU, RAM ve Video kartından yüzlerce veya binlerce kez daha yavaş. Grafikler yavaşlıyorsa, diskinizde yazılan önemli sorunlar var.
Bay Shiny ve Yeni 宇 宇

1
Soru, bir nedenden ötürü "dosya sayısıyla orantılı olarak zaman harcamamış" oldu. % 50 daha hızlı aramıyorum.
Sindri Traustason

@Sindri Komut istemi yöntemini yaparsanız, sistem sihrini çalışmaya başlamadan hemen önce hiçbir gecikme olmamalıdır. Anladığım kadarıyla bu ön işleme, probleminizin olduğu yerdir.
nEJC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.