it-swarm.asia

Menghapus file secara massal di Windows

Saya memiliki direktori, yang berisi ~ 3 juta file dalam subdirektori tertentu pada server Windows 2008. Menghapus file secara manual melalui SHIFT + DEL pada direktori root membutuhkan waktu lama. Apakah ada cara lain untuk melakukan penghapusan dengan cara lebih cepat ?

139
aaginor

Saya secara teratur perlu menghapus banyak file dan direktori dari drive terenkripsi WinXP, biasanya sekitar 22 GB dari 500.000 file dalam 45.000 folder.

Menghapus dengan Windows Explorer adalah sampah karena membuang banyak waktu untuk menghitung file. Saya biasanya memindahkan barang yang perlu saya hapus ke C:\stufftodelete dan memiliki file batch deletestuff.bat ke rmdir /s/q C:\stufftodelete. Ini dijadwalkan untuk berjalan di malam hari, tetapi kadang-kadang saya harus menjalankannya di siang hari agar semakin cepat semakin baik.

Ini adalah hasil dari tes Waktu Cepat dari sampel kecil 5,85 MB dari 960 file dalam 303 folder. Saya menjalankan metode 1 diikuti oleh metode 2, lalu mengatur ulang direktori tes.

Metode 1 menghapus file dan struktur direktori dalam satu pass:

rmdir /s/q foldername

Metode 2 memiliki pass pertama untuk menghapus file dan output ke nul untuk menghindari overhead penulisan ke layar untuk setiap file menghanguskan. Lulus kedua kemudian membersihkan struktur direktori yang tersisa:

del /f/s/q foldername > nul
rmdir /s/q foldername
  • Metode 1: 17.5s, 14.9s, 13.9s, 14.8s, 13.8s: rata-rata 14,98 detik
  • Metode 2: 14.3s, 12.1s, 11.7s, 14.2s, 11.8s: rata-rata 12.82 detik

Berikut ini adalah hasil tes lain menggunakan 404 MB dari 19.521 file di 3.243 folder:

  • Metode 1: 2 menit 20 detik
  • Metode 2: 2 menit 33 detik

Jadi tidak banyak di dalamnya, mungkin terlalu dekat untuk menilai pada satu tes.


Sunting: Saya telah menguji ulang dengan lebih banyak data, ini adalah kasus khas bagi saya: 28,3 GB dari 1.159.211 file di 146.918 folder:

  • Metode 1: 2j 15m, 2j 34m: rata-rata: 2 jam 25 menit
  • Metode 2: 49m, 57m: rata-rata: 53 menit

Wow, metode 2 hampir tiga kali lebih cepat daripada metode 1! Saya akan memperbarui deletestuff.bat saya!

178
Hugo

Jika Anda harus menghapus pohon direktori besar secara teratur, pertimbangkan untuk menyimpan root dari pohon direktori itu pada partisi yang terpisah, kemudian cukup memformatnya kapan pun Anda perlu menghapus semuanya. Jika Anda perlu mengotomatisasi ini, Anda dapat menggunakan perintah DOS ini:

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

di mana Z: adalah partisi 'volatil' Anda. Catatan: partisi harus tidak memiliki label. Saya membuat blog tentang ini di sini .

18
Mr. Bungle

Pada Prompt perintah (Mulai -> Jalankan -> cmd):

del /f /s /q foldername 
9
lmsasu

Selain menyalin/memindahkan file dengan sangat cepat (menggunakan API sendiri), TeraCopy dapat menghapus file dan juga sangat cepat. Sejak menemukan TeraCopy saya tidak menggunakan komputer tanpa menginstalnya (jika saya akan menyalin/memindahkan/menghapus).

Installer yang sama menginstal edisi x64 tetapi untuk menggunakannya Anda harus memaksanya secara manual.

Beta yang saya rekomendasikan untuk versi stabil: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

6
rautamiekka

Saya melakukan file kelelawar yang melakukan hal yang sama.

@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

itu berfungsi dalam dua langkah, satu, itu mencoba untuk menghapus file. Dan yang kedua adalah mencoba mengambil kepemilikan atas file-file tersebut. y harus diubah sesuai lokal Anda (singkatan yes dalam bahasa Inggris). Jika gagal tugas (misalnya jika gagal karena izin) maka Anda harus menjalankannya lagi. Namun, ronde kedua tidak akan mencoba untuk menghapus file yang dihapus di ronde pertama, sehingga bisa jadi cukup cepat.


Bagaimana cara menggunakannya. Simpan sebagai delfolder.bat dalam rute jalur (misalnya c:\windows), lalu jalankan sebagai

 delfolder "foldername"   

di mana foldername adalah nama folder

Dalam pengujian saya, menghapus 123'000 file membutuhkan waktu 3 menit (sata 7200rpm). YAY!

6
magallanes

Menggunakan kode di bawah ini biasanya berfungsi dengan baik untuk saya.

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

Gunakan perintah rd/s dari Prompt perintah.

3
JP Alioto

Solusi praktis terbaik mungkin adalah memindahkan folder keluar dari suatu tempat (mis. Keranjang Sampah) dan kemudian mulai menghapusnya. Itu akan memakan waktu lama, tetapi setidaknya itu akan keluar dari jalan.

Saya cukup yakin waktu yang diperlukan untuk menghapus semua file tersebut merupakan persyaratan yang melekat pada tugas, bukan inefisiensi dalam implementasi penghapusan.

2
Ryan Thompson

Instal Cygwin dan gunakan rm -r . Tapi itu mungkin berlebihan.

1
CarlF

Apakah Anda mengaktifkan pembuatan nama file pendek? Jika demikian, apakah Anda benar-benar membutuhkannya? Menghapus file hanyalah operasi metadata. Jadi, jika Anda memiliki dua kali jumlah nama untuk dihapus, jumlah pekerjaan secara signifikan lebih tinggi.

1
MSalters

Sudahkah Anda mencoba salah satu dari kedua aplikasi ini?

Pastikan untuk mengatur jumlah timpa ke 0 jika Anda ingin kinerja tercepat. Lakukan ini dengan mengklik opsi kemudian ubah nilainya di bagian bawah dialog.

Masukkan jalur untuk menghapus di bidang Sumber dan kemudian klik Hapus.

Aplikasi ini tidak meletakkan file di tempat sampah. Gunakan dengan hati-hati.

0
Stephen Kellett

Ini disediakan untuk melengkapi dan menambah langkah-langkah yang diambil dalam jawaban yang disebutkan sebelumnya.

Dua metode yang diberikan di atas tampaknya cukup efektif, tetapi untuk menentukan kinerjanya akan sulit kecuali jika dilakukan dengan kondisi yang sama persis:

  • Perangkat & Model Hard Drive Fisik
    • Lebih disukai, ATTO/Crystal Disk melakukan benchmark sebelum mengkloning data pada mereka
  • Partisi yang Sama/Lokasi Volume & Geometri
    • Cara untuk melakukan ini adalah men-defrag partisi/folder sampel dan mengkloningnya persis seperti 2 jenis Hard Drive yang sama persis (dari langkah sebelumnya)
  • Kemudian jalankan konfigurasi melalui File Batch dan gunakan Powershell Cmdlet untuk login dan mengukur kinerjanya.

    • Idealnya, tambahkan beberapa mekanisme untuk mencegah bias caching karena kebaruan dari kegiatan serupa.
  • Berikut ini adalah beberapa folder sampel (dinamai sebagai ukuran total) yang saya coba tetapi tidak bisa mendapatkan kinerja/hasil konklusif.

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • Saya telah memposting file log keluaran, tapi saya percaya variansnya sangat besar karena ukuran & distribusi file folder dll.

Powershell:

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
0
Alex S

Jawaban dari Hugo adalah yang tercepat tetapi tidak menghapus file sistem atau tersembunyi di pass pertama, jadi jika Anda ingin solusi yang lebih lengkap gunakan parameter /Sebuah:

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

Tentang file BAT oleh Magallanes , berhati-hatilah dengan takeown dan icacls, karena hardlink berbagi izin dan pemilik yang sama, jadi jika ada hardlink tak jenuh di folder yang ingin Anda hapus, menggunakan takeown dan icacls akan mengubah izin dan pemilik file di luar folder.

Dengan menggunakan alat ln.exe Anda dapat membuat daftar semua file yang di-link di dalam folder dan tahu apakah mereka di-hardlink ke file di luar folder (hardlink tidak jenuh):

ln.exe --enum foldername > HardlinksList.txt
0
liamZ