Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление файлов по маске (http://forum.oszone.net/showthread.php?t=269860)

IlyaBarkov 13-10-2013 14:24 2233641

Удаление файлов по маске
 
Все привет!
Столкнулся с такой задачей, не знаю, как решить.
-------------
Есть каталог 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 2233654

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

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 2233661

Foreigner, спасибо!

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

Foreigner 13-10-2013 21:45 2233883

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

IlyaBarkov 13-10-2013 21:52 2233886

Цитата:

Цитата Foreigner
Вообще можно и без батника:
Код:
del /s f:\media\photos\13@*.jpg »

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

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

Спасибо за помощь!

sov44 15-10-2013 00:10 2234539

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

@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 15-10-2013 05:03 2234625

Цитата:

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

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

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

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


Время: 04:47.

Время: 04:47.
© OSzone.net 2001-