Tôi có một thư mục chứa ~ 3 triệu tệp trong một thư mục con nhất định trên máy chủ Windows 2008. Xóa thủ công các tệp qua SHIFT + DEL trên thư mục gốc mất nhiều năm. Có cách nào khác để xóa dữ liệu một cách nhanh hơn không?
Tôi có một thư mục chứa ~ 3 triệu tệp trong một thư mục con nhất định trên máy chủ Windows 2008. Xóa thủ công các tệp qua SHIFT + DEL trên thư mục gốc mất nhiều năm. Có cách nào khác để xóa dữ liệu một cách nhanh hơn không?
Câu trả lời:
CẢNH BÁO: nếu bạn có liên kết tượng trưng đến thư mục thì del
sẽ xóa thư mục thực tế và không liên kết tượng trưng. Hãy cẩn thận với điều này và đừng chạy các lệnh này trừ khi bạn biết không có liên kết tượng trưng trong thư mục đích.
Tôi thường xuyên cần xóa rất nhiều tệp và thư mục khỏi ổ đĩa được mã hóa WinXP, thường là khoảng 22 GB 500.000 tệp trong 45.000 thư mục.
Xóa bằng Windows Explorer là rác vì nó lãng phí rất nhiều thời gian để liệt kê các tệp. Tôi thường di chuyển những thứ tôi cần xóa sang C: \ Stufftodelete và có tệp bó deletestuff.bat sang rmdir /s/q C:\stufftodelete
. Điều này được lên kế hoạch để chạy vào ban đêm, nhưng đôi khi tôi cần chạy nó vào ban ngày để càng nhanh càng tốt.
Đây là kết quả của một thử nghiệm thời gian nhanh chóng cho một mẫu nhỏ 5,85 MB gồm 960 tệp trong 303 thư mục. Tôi đã chạy phương thức 1 theo sau là phương pháp 2, sau đó đặt lại các thư mục kiểm tra.
Phương pháp 1 loại bỏ các tệp và cấu trúc thư mục trong một lần:
rmdir /s/q foldername
Phương pháp 2 có một lần đầu tiên để xóa các tệp và đầu ra cho nul để tránh chi phí ghi lên màn hình cho mọi tệp singe. Một pass thứ hai sau đó dọn sạch cấu trúc thư mục còn lại:
del /f/s/q foldername > nul
rmdir /s/q foldername
Đây là kết quả của một thử nghiệm khác sử dụng 404 MB của 19.521 tệp trong 3.243 thư mục:
Vì vậy, không có nhiều trong đó, có lẽ quá gần để đánh giá trong một bài kiểm tra.
Chỉnh sửa: Tôi đã kiểm tra lại với nhiều dữ liệu hơn, đây là trường hợp điển hình đối với tôi: 28,3 GB trong số 1.159.211 tệp trong 146.918 thư mục:
Wow, phương pháp 2 nhanh hơn gần ba lần so với phương pháp 1! Tôi sẽ cập nhật phần xóa của tôi.bat!
del
sẽ xóa thư mục thực tế và không liên kết tượng trưng. Hãy cẩn thận với điều này và đừng chạy các lệnh này trừ khi bạn biết không có liên kết tượng trưng trong thư mục đích.
Nếu bạn phải xóa cây thư mục lớn thường xuyên, hãy xem xét việc lưu trữ gốc của cây thư mục đó trên một phân vùng riêng, sau đó chỉ cần định dạng nhanh bất cứ khi nào bạn cần xóa mọi thứ. Nếu bạn cần tự động hóa việc này, bạn có thể sử dụng lệnh DOS này:
echo Y | format Z: /FS:NTFS /X /Q
Trong đó Z: là phân vùng 'dễ bay hơi' của bạn. Lưu ý: phân vùng phải không có nhãn. Tôi viết blog về điều này ở đây .
Trong dấu nhắc lệnh (Bắt đầu -> Chạy -> cmd
):
del /f /s /q foldername
Ngoài việc sao chép / di chuyển tệp rất nhanh (sử dụng API riêng), TeraCopy có thể xóa các tệp và nó cũng rất nhanh. Kể từ khi tìm ra TeraCopy, tôi không sử dụng máy tính mà không cài đặt nó (nếu tôi sẽ sao chép / di chuyển / xóa).
Trình cài đặt tương tự cài đặt phiên bản x64 nhưng để sử dụng nó, bạn phải buộc nó bằng tay.
Bản beta mà tôi khuyên dùng trên các phiên bản ổn định: http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/
Tôi đã làm một tập tin bat mà làm như vậy.
@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
Nó thực hiện công việc theo hai bước, một, nó cố gắng xóa các tập tin. Và thứ hai là cố gắng sở hữu các tập tin. y nên được thay đổi theo địa phương của bạn (viết tắt của yes trong tiếng Anh). Nếu thất bại nhiệm vụ (ví dụ nếu thất bại vì sự cho phép) thì bạn phải chạy lại nó. Tuy nhiên, vòng thứ hai sẽ không cố xóa các tệp đã bị xóa trong vòng đầu tiên, vì vậy nó có thể khá nhanh.
Làm thế nào để sử dụng nó. Lưu dưới dạng delfolder.bat trong tuyến đường dẫn (ví dụ: c: \ windows), sau đó chạy dưới dạng
delfolder "foldername"
trong đó tên người dùng là tên của thư mục
Trong thử nghiệm của tôi, việc xóa 123'000 tệp mất 3 phút (sata 7200rpm). YAY!
%1
trong một kịch bản, nhưng "%~1"
. Bằng cách này, nếu đối số đã được thông qua với dấu ngoặc kép, nó sẽ được bổ sung và trích dẫn. Nếu nó không được thông qua với dấu ngoặc kép, nó được trích dẫn.
Sử dụng mã dưới đây thường hoạt động tốt cho tôi.
mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
rsync
trong Linux. Nó thậm chí còn ở đây nhanh hơn rmdir
?
del /f/q/s
+ rmdir /s/q
. Nếu dir_to_wipe của bạn có rác, c:\some_important_dir
bạn sẽ mất dữ liệu.
Sử dụng lệnh rd / s từ dấu nhắc lệnh.
Giải pháp thực tế tốt nhất có lẽ là di chuyển thư mục ra khỏi nơi nào đó (ví dụ: Thùng rác) và sau đó bắt đầu xóa nó. Nó sẽ mất nhiều thời gian, nhưng ít nhất nó sẽ tránh được.
Tôi khá chắc chắn rằng thời gian cần thiết để xóa tất cả các tệp đó là một yêu cầu vốn có của nhiệm vụ, không phải là không hiệu quả trong việc thực hiện xóa.
Cài đặt Cygwin và sử dụng rm -r . Nhưng đó có thể là quá mức cần thiết.
rd /q /s
...
rm
thực sự nhanh như cmd.exe dựng sẵn rd
không? Bởi vì việc mô phỏng cygwin của giao diện posix khá chậm vì nó đòi hỏi phải thực hiện một số công việc bổ sung, điều rm
đó không thực sự đánh giá cao.
rm -rf
. Khoảng 10 phút sau tôi đã hủy bỏ và quay trở lại del /f/s/q
vì theo Cygwin, việc sử dụng đĩa chỉ là 50%. Dưới del
, sử dụng đĩa được chốt ở mức 100%. Vì vậy, tôi nghĩ rằng nó phải được xóa nhanh hơn. Sử dụng CPU là <1% cho cả hai phương pháp. Tôi không chắc chắn về số tệp vì tôi đã đóng Windows File Deleter sau khi nó mất 10 phút để tính toán.
Bạn đã thử một trong hai ứng dụng này chưa?
Hãy chắc chắn đặt số lượng ghi đè thành 0 nếu bạn muốn hiệu suất nhanh nhất. Làm điều này bằng cách nhấp vào tùy chọn sau đó thay đổi giá trị ở dưới cùng của hộp thoại.
Nhập đường dẫn cần xóa trong trường Nguồn và sau đó nhấp vào Xóa.
Các ứng dụng này không đặt các tệp vào thùng rác. Sử dụng cẩn thận.
Điều này được cung cấp để khen ngợi và tăng cường các bước thực hiện trong các câu trả lời được đề cập trước đó.
Hai phương pháp đã cho ở trên có vẻ khá hiệu quả, nhưng để xác định hiệu suất sẽ khó trừ khi chúng được điều chỉnh theo cùng điều kiện chính xác:
Sau đó thực hiện các cấu hình thông qua Batch File và sử dụng Powershell Cmdlet để ghi nhật ký và đo lường hiệu suất của chúng.
Sau đây là một số thư mục mẫu (được đặt tên là tổng kích thước) mà tôi đã thử nghiệm nhưng không thể nhận được bất kỳ kết quả / hiệu suất kết luận nào.
r.bat
rmdir /s/q 3.2G
thứ năm
del /f/s/q 3.3G > nul rmdir /s/q 3.3G
Quyền hạn:
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
Câu trả lời từ Hugo là nhanh nhất nhưng nó không xóa các tệp hệ thống hoặc ẩn trong lần đầu tiên, vì vậy nếu bạn muốn một giải pháp hoàn chỉnh hơn, hãy sử dụng tham số / a:
del /f /s /q /a foldername > nul
rmdir /s /q foldername
Về tệp BAT của Magallanes , hãy hết sức cẩn thận với Takeown và icacls, vì các liên kết cứng chia sẻ cùng quyền và chủ sở hữu, vì vậy nếu có các liên kết cứng chưa bão hòa trong thư mục bạn muốn xóa, sử dụng Takeown và icacls sẽ thay đổi quyền và chủ sở hữu của các tệp bên ngoài thư mục.
Sử dụng công cụ ln.exe, bạn có thể liệt kê tất cả các tệp được liên kết cứng trong thư mục và biết liệu chúng có được liên kết cứng với các tệp bên ngoài thư mục không (liên kết cứng chưa bão hòa):
ln.exe --enum foldername > HardlinksList.txt
Xóa thư mục nhanh hơn xóa nhiều tệp.
Vì vậy, nếu bạn thích sử dụng chuột thay vì dấu nhắc lệnh, bạn có thể tạo thư mục, di chuyển tệp đến đó và xóa nó (với Shift + Del như bạn đã nói).