CMD/BAT - Удаление файлов по маске

Ответить
Аватара пользователя
IlyaBarkov

CMD/BAT - Удаление файлов по маске

Сообщение IlyaBarkov »

Все привет!

Столкнулся с такой задачей, не знаю, как решить.

-------------

Есть каталог F:\Files\

В нём огромное количество JPG-файлов (порядка 1 млн). Они хранятся во вложенных каталогах вида F:\Files\a\b\c\

Нужное проверить все вложенные в F:\Files\ каталоги и удалить все JPG-файлы, имя которых начинается с test18@ (например, [url=mailto:test18@abcdef-123-fhd.jpg]test18@abcdef-123-fhd.jpg[/url])

Имена каталогов - 1 буква из списка: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f

-------------

Спасибо за помощь Изображение
Аватара пользователя
Foreigner

Re: CMD/BAT - Удаление файлов по маске

Сообщение Foreigner »

Вообще можно и без батника:



Код:

Код: Выделить всё

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

Re: CMD/BAT - Удаление файлов по маске

Сообщение IlyaBarkov »

Foreigner, спасибо!



Файлов, подлежащих удалению, примерно 25-30% от общего количества.

Если удаляться будет не более нескольких часов (допустим, 2-3), то задержка некритична — это разовая задача, не для регулярного запуска. Как думаете, удаление 300-500к файлов уложится в эти 2-3 часа?
Аватара пользователя
IlyaBarkov

Re: CMD/BAT - Удаление файлов по маске

Сообщение IlyaBarkov »

IlyaBarkov, Ну как, удалились? Сmd.exe не затупил на таких объемах?
Аватара пользователя
Foreigner

Re: CMD/BAT - Удаление файлов по маске

Сообщение Foreigner »

Цитата Foreigner:



Вообще можно и без батника:

Код:

del /s f:\media\photos\13@*.jpg
CMD/BAT - Удаление файлов по маске




Расскажу о результате:

530.000 файлов удалились за полтора часа при запуске через cmd вышеописанной команды.



Компьютер при этом не зависал, всё работало в штатном режиме.



Спасибо за помощь!
Аватара пользователя
sov44

Re: CMD/BAT - Удаление файлов по маске

Сообщение sov44 »

Можно ли ускорить выполнение кода, запустив его в несколько потоков?



Код:

Код: Выделить всё

@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
Аватара пользователя
Iska

Re: CMD/BAT - Удаление файлов по маске

Сообщение Iska »

Цитата sov44:



Можно ли ускорить выполнение кода, запустив его в несколько потоков?
CMD/BAT - Удаление файлов по маске




Если Вы про подобное:


Цитата Foreigner:



Но боюсь, что 1.5 млн файлов будут долго удаляться. Можно попробовать запустить несколько параллельных удалений:
CMD/BAT - Удаление файлов по маске




то, на самом деле — нет, нельзя. Любые линейные «потоки» будут упираться в один жёсткий диск.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»