Показать полную графическую версию : Удаление файлов по маске
IlyaBarkov
13-10-2013, 14:24
Все привет!
Столкнулся с такой задачей, не знаю, как решить.
-------------
Есть каталог F:\Files\
В нём огромное количество JPG-файлов (порядка 1 млн). Они хранятся во вложенных каталогах вида F:\Files\a\b\c\
Нужное проверить все вложенные в F:\Files\ каталоги и удалить все JPG-файлы, имя которых начинается с test18@ (например, test18@abcdef-123-fhd.jpg)
Имена каталогов - 1 буква из списка: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
-------------
Спасибо за помощь :)
Foreigner
13-10-2013, 14:49
Вообще можно и без батника:
del /s f:\media\photos\13@*.jpg
Но боюсь, что 1.5 млн файлов будут долго удаляться. Можно попробовать запустить несколько параллельных удалений:
@echo off
for /d %%i in (f:\media\photos\*) do start /b cmd /c (del "%%i\13@*.jpg")
IlyaBarkov
13-10-2013, 15:03
Foreigner, спасибо!
Файлов, подлежащих удалению, примерно 25-30% от общего количества.
Если удаляться будет не более нескольких часов (допустим, 2-3), то задержка некритична — это разовая задача, не для регулярного запуска. Как думаете, удаление 300-500к файлов уложится в эти 2-3 часа?
Foreigner
13-10-2013, 21:45
IlyaBarkov, Ну как, удалились? Сmd.exe не затупил на таких объемах?
IlyaBarkov
13-10-2013, 21:52
Вообще можно и без батника:
Код:
del /s f:\media\photos\13@*.jpg »
Расскажу о результате:
530.000 файлов удалились за полтора часа при запуске через cmd вышеописанной команды.
Компьютер при этом не зависал, всё работало в штатном режиме.
Спасибо за помощь!
Можно ли ускорить выполнение кода, запустив его в несколько потоков?
@echo off
setlocal enabledelayedexpansion
set "Rash="c:\*.log" "c:\*.temp" "c:\*.tmp""
for /f "usebackq delims=" %%i in (`dir /b /s /a:-d /a:-h %Rash% 2^>nul`) do (
2>nul del /q "%%i" | 1>nul findstr "."
if errorlevel 1 (
echo %%i | >nul findstr /rc:"V01." || (
2>nul set /a iSumL +=%%~zi
)))
echo %iSumL%
pause
Можно ли ускорить выполнение кода, запустив его в несколько потоков? »
Если Вы про подобное:
Но боюсь, что 1.5 млн файлов будут долго удаляться. Можно попробовать запустить несколько параллельных удалений: »
то, на самом деле — нет, нельзя. Любые линейные «потоки» будут упираться в один жёсткий диск.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.