Страница 1 из 1

TASKMASTER. Скрипт "Рекурсия по DIR + delete". НУЖ

СообщениеДобавлено: 23 янв 2009, 20:27
Музалёв Николай
Коллеги!

Возникла необходимость очищать транзитную общую область - задача в общем всем известная. Предполагается пользовать под это дело упомянутый продукт.

Если у кого есть отлаженный скрипт на эту тему, то не пожадничайте поделиться.

(Ну не то, чтобы совсем тормоз, но пока не написалось - наверное, еще не совсем въехал в тонкости языка и боюсь слишком свободных экспер., поскольку отлаживаюсь хотя и на рабочем томе, но на боевом сервере. И надо как всегда - "вчера" и время катастрофически поджимает... Хочется побыстрее запуститься.)

Формально задача такова:

ИСХОДНАЯ:
- существует корневой каталог, назовем RootDir

- в нем существует произвольное количество подкаталогов (например Dir_1, Dir_2, ... Dir_N)

- каждый из каталогов Dir_i может содержать сложное дерево файловых объектов: и каталоги следующего уровня, и просто файлы россыпью и смесь этого.

- атрибуты на элементы этого дерева расставлены совершенно произвольно. И системные и наши, NW-шные (т.е. обычная файло-свалка прямохордящих)

НЕОБХОДИМО:
- получить скрипт, который заходит в RootDir и НЕ удаляя каталоги первого уровня (Dir_i) , сносит в каждом таком каталоге всё нижележащее.

Спасибо.

PS. Кстати, может кому попадался форум, где такими скриптами хвастались - не затруднитесь ссылочку.
Не официальном сайте есть примеры, но они какие-то слишком академические.... По к/мере те, которые уже просмотрел...

СообщениеДобавлено: 26 янв 2009, 07:46
solomin
find ./ -maxdepth 2 -mindepth 2 -type d -exec rm -rf {} \;

СообщениеДобавлено: 26 янв 2009, 12:57
Музалёв Николай
Хм... Если это - из TaskMastera, то что то не нахожу этого в доках.
А если это - не из ТМ, то не затруднит ли соотв. комментарии?

СообщениеДобавлено: 26 янв 2009, 13:08
Dimerson
есть самописный аналог rm-rf (NLM) можно прибивать каталоги и потом пересоздавать. если это временная файлопомойка то можно и каталоги прибивать ...

СообщениеДобавлено: 26 янв 2009, 13:36
Музалёв Николай
А дать можно ?

СообщениеДобавлено: 26 янв 2009, 14:29
solomin
у меня подобные вещи выполняются с линуксовой клиентской машины(если сервер на OES(2) linux - то можно прямо на нем).

P.S. это была линуксовая команда find.

СообщениеДобавлено: 26 янв 2009, 15:22
Dimerson
Музалёв Николай писал(а):А дать можно ?


rmrf.nlm ушел мылом (потестите сперва гденить в уголочке).

СообщениеДобавлено: 26 янв 2009, 21:49
Charles Kludge
Код: Выделить всё
// (#) 2009 by Charles Kludge
// BEWARE! ALL LINES MUST BE TRIMMED - I.E. W/O TRAILING SPACES & <TABS>
// TMRUN del_xlam.tsk vol:/dir_to_erase
// Erases contents of 1st level subdirs
// LONG_NAMES supported
// Russian names supported
// Tested on TaskMaster v4.20(2008/11/07) under NW411SP9ENG
//LOG ON
CD %0
ECHO Processing %CWD%
// findfirst()
DEFINE %1 %DIR_SUB_*.*%
WHILE "%1">""
DEFINE %2 %CWD%\%1
// creates full path to current subdir in LONG_NAME format
DEFINE %2 %FILE_NAME_LONG_%2%
ECHO [%2]
// like  rm -rf %1 rmdir %1
// /P Purge deleted directories/files
// /Y Don't confirm
DELTREE %1 /P /Y
// recreate erased dir in
// /L LONG_NAMES format
// quotes needs tu support spases in dirnames
MKDIR "%2" /L
// findnext()
DEFINE %1 %DIR_SUB_%
LOOP
// remove remaining files in CWD
ERASE *.* /Y

СообщениеДобавлено: 28 янв 2009, 13:50
Музалёв Николай
Спасибо, коллеги!
И модуль, и скрипт пригодились, правда в разных целях.

Что касается скрипта от Чарли, то он работает ( кто бы сомневался!), но последнюю его часть
Код: Выделить всё
.......
LOOP
// remove remaining files in CWD
ERASE *.* /Y

предлагается принять в версии Вариант ДВА:
Код: Выделить всё
.......
LOOP
// remove remaining files in CWD
//
// findfirst() (FILE)
DEFINE %1 %DIR_FILE_*.*%
//
// Are there FILES in ROOT dir ??
IF NOT "%1"=="" THEN BEGIN
//
// If YES delete this files.
WHILE "%1">""
//
DEFINE %2 %1
// Attributes? Convert it to NORMAL status.
CHMOD %2 N /H
//
// findnext() (FILE)
DEFINE %1 %DIR_FILE_%
//
ERASE %2
//
LOOP
//
ENDIF
//

Оснвание такой модификации очевидно: файлы прямоходящего могут иметь практически любой набор атрибутов. (У меня есть люди, рабочие станции которых умудряются выставить Di & Ri на файлы и каталоги. Причем программисты едят землю, что ничего не знают о системе NW.
И как бы это могло быть?)

Что касается ввода временной переменной %2, то это обусловлено запретом удалить текущий "рабочий" файл (при работе скрипта он в %1) ДО ТОГО , как будет проведена выборка следующего "рабочего файла".

Ребята!
Еще раз - огромное Спасибо.

Тему закрыть.