Удаление файлов

Обсуждение программ nnCron и nnCron LITE

Удаление файлов

Postby ComeOn » Sat, 10 Apr 2010, 22:30

Все доброго времени суток.
Понимаю, что так, или иначе вопрос обсуждался, но прошу помощи по конкретной задаче.
Есть т.н. "Общая папка" на предприятии для передачи фалов между сотрудниками. В ней куча папок, на все стоят отдельные разрешения. Требуется каждый месяц удалять в Общей папке и всех ее подкаталогах удалять ВСЕ файлы, но каталоги оставлять. Возможно потом надо будет добавить исключения - папки, которые очищать не надо. Но это второй вопрос. Никто не посоветует, как реализовать задачу?
ComeOn
 
Posts: 10
Joined: Sat, 10 Apr 2010, 22:24

Re: Удаление файлов

Postby VoidVolker » Sat, 10 Apr 2010, 23:19

Code: Select all
#( Задача_0018110410
NoActive
Action:
RECURSIVE TODEPTH FILESONLY
FOR-FILES: "C:\path\*"
  FOUND-FULLPATH FDELETE
;FOR-FILES
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Удаление файлов

Postby ComeOn » Sun, 11 Apr 2010, 11:01

:D Работает .
А если с исключениями? Как исключить папки по полным путям?
ComeOn
 
Posts: 10
Joined: Sat, 10 Apr 2010, 22:24

Re: Удаление файлов

Postby VoidVolker » Sun, 11 Apr 2010, 15:07

Code: Select all
#( Задача_0018110410
NoActive
Action:
RECURSIVE TODEPTH FILESONLY
FOR-FILES: "C:\path\*"
  FOUND-FULLPATH S" C:\path\nodel1\" SEARCH NIP NIP
  FOUND-FULLPATH S" C:\path\nodel2\" SEARCH NIP NIP OR
  FOUND-FULLPATH S" C:\path\nodel3\" SEARCH NIP NIP OR
  NOT  IF  FOUND-FULLPATH FDELETE  THEN
;FOR-FILES
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Удаление файлов

Postby ComeOn » Sun, 11 Apr 2010, 22:16

:) Спасибо. Кратко и по делу - такое редко на форумах бывает. 8)
ComeOn
 
Posts: 10
Joined: Sat, 10 Apr 2010, 22:24

Re: Удаление файлов

Postby VoidVolker » Sun, 11 Apr 2010, 23:00

Можно немного и оптимизировать:
Code: Select all
#( Задача_0000110410
NoActive
: in-string?   \ ( a1 u1 a2 u2 -- ? )
  SEARCH NIP NIP
;
Action:
RECURSIVE TODEPTH FILESONLY
FOR-FILES: "C:\path\*"
  FOUND-FULLPATH 2>R
  2R@ S" C:\path\nodel1\" in-string?
  2R@ S" C:\path\nodel2\" in-string? OR
  2R> S" C:\path\nodel3\" in-string? OR
  NOT  IF  FOUND-FULLPATH FDELETE  THEN
;FOR-FILES
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Удаление файлов

Postby ComeOn » Mon, 12 Apr 2010, 07:56

:D А это уже объяснения требует. а1 u1 - это подстановочные символы? Тогда что есть что? А можно пути из файла черпать текстового?
ComeOn
 
Posts: 10
Joined: Sat, 10 Apr 2010, 22:24

Re: Удаление файлов

Postby VoidVolker » Mon, 12 Apr 2010, 08:26

Code: Select all
#( Задача_0000110410
NoActive
 \ Определяем новое слово для поиска в строке
: in-string?   \ ( a1 u1 a2 u2 -- ? ) <-- стековый комментарий
  SEARCH NIP NIP
;
Action:
RECURSIVE TODEPTH FILESONLY   \ Опции поиска файлов
FOR-FILES: "C:\path\*"
  FOUND-FULLPATH                          \ a u     \ Получаем полный путь к найденному файлу
  2>R                                     \ R: a u  \ и отправляем его на стек возвратов
  2R@                                     \ a u  R: a u  \ Извлекаем со стека возвратов путь
  S" C:\path\nodel1\" in-string?          \ ?  R: a u  \ Ищем в полном пути строку1
  2R@ S" C:\path\nodel2\" in-string? OR   \ ?  R: a u  \ Ищем в полном пути строку2
  2R>                                     \ ?  a u      \ Переносим путь со стека возвратов на стек данных(если этого не сделать, то произойдет исключение)
  S" C:\path\nodel3\" in-string? OR   \ ?  \ Ищем в полном пути строку3
  NOT  IF  FOUND-FULLPATH FDELETE  THEN    \ Если текущий найденный файл не расположен в исключенных каталогах, то удаляем его
;FOR-FILES
)#

Кстати, в этом решении каталоги исключаются вместе с подкаталогами. Если необходимо чистить и подкаталоги, то для этого уже лучше применить регулярное выражение:
Code: Select all
#( Задача_0000110410
NoActive
Action:
RECURSIVE TODEPTH FILESONLY   \ Опции поиска файлов
FOR-FILES: "C:\path\*"
  FOUND-FULLPATH S" /(C\:\\path\\nodel1\\\w*[^\\]\.\w*)|(C\:\\path\\nodel2\\\w*[^\\]\.\w*)/" RE-MATCH
  NOT  IF  FOUND-FULLPATH FDELETE  THEN    \ Если текущий найденный файл не расположен в исключенных каталогах, то удаляем его
;FOR-FILES
)#

ComeOn wrote:А можно пути из файла черпать текстового?

Можно. Для этого необходимо подключить плагин read-by-line.spf:
Code: Select all
#( Задача_0000110410
NoActive
: in-string?   \ ( a1 u1 a2 u2 -- ? )
  SEARCH NIP NIP
;
Action:
RECURSIVE TODEPTH FILESONLY
FOR-FILES: "C:\path\*"
  0  \ флаг
  READ-BY-LINE: "C:\wlist.txt"
    FOUND-FULLPATH FOUND-LINE in-string? OR
  ;READ-BY-LINE
  NOT IF  FOUND-FULLPATH FDELETE  THEN
;FOR-FILES
)#


P.S. Если интересует форт, то необходимо изучить книги Лео Броуди - Starting Forth и Thinking Forth, затем можно почитать книгу Баранова и Ноздрунова и вот здесь еще немного литературы.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Удаление файлов

Postby ComeOn » Mon, 12 Apr 2010, 08:51

Спасибо большое. Осталось решить работу крона в 2008 - нет значка, корректно ли работает все остальное.. но это другая тема... тут про win7 есть похожая.
ComeOn
 
Posts: 10
Joined: Sat, 10 Apr 2010, 22:24

Re: Удаление файлов

Postby VoidVolker » Mon, 12 Apr 2010, 10:32

Под вин 2008 ннкрон необходимо запускать приложением с параметром -dir [path] - прописывается в startnncron.bat.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Удаление файлов

Postby ComeOn » Thu, 15 Apr 2010, 16:13

:(.. Усложнили задачу. Надо рубить файлы с возрастом старше 15 дней
ComeOn
 
Posts: 10
Joined: Sat, 10 Apr 2010, 22:24

Re: Удаление файлов

Postby VoidVolker » Thu, 15 Apr 2010, 16:26

Code: Select all
#( Задача_1724150410
NoActive
: in-string?   \ ( a1 u1 a2 u2 -- ? )
  SEARCH NIP NIP
;
Action:
RECURSIVE TODEPTH FILESONLY
FOR-FILES: "C:\path\*"
  0  \ флаг
  READ-BY-LINE: "C:\wlist.txt"
    FOUND-FULLPATH FOUND-LINE in-string? OR
  ;READ-BY-LINE
  NOT IF
    CUR-DATE FOUND-FULLPATH FWDATE DATE- 15 <
    IF
      FOUND-FULLPATH FDELETE
    THEN
  THEN
;FOR-FILES
)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Удаление файлов

Postby elos » Fri, 16 Apr 2010, 08:35

Возникла идея "универсального" решения этого вопроса, но не смог побороть "приёмник"...
Code: Select all
#( copy_to_con
NoActive
AsLoggedUser
\ LoadProfile
Action:
StartIn: "C:\nnBackup"
ShowNormal   NormalPriority
START-APP: C:\nnBackup\nnbackup.exe copy -i C:\TEST -o CON: -nocopy -v -s -d -stat
BEEP: 500 500
)#

как результат имеем (запускал просто из командной строки):
C:\TEST>C:\nnBackup\nnbackup.exe copy -i C:\TEST -o nul: -v -s -d
nnBackup. V 3.01 RC9 Build 139 2009-03-25 11:10
Copyright (C) 2001-2010 nnSoft. nemtsev@nncron.ru
Зарегистрирован только для некоммерческого использования
Registered for non-commercial use only
Fr 16.Apr.2010 09:14 Start copy
Fr 16.Apr.2010 09:14 C:\TEST\List.txt
Fr 16.Apr.2010 09:14 ERROR # 123: C:\TEST\List.txt ==> nul:\List.txt: Синтаксическая ошибка в имени файла, имени папки или метке тома.

C:\TEST>C:\nnBackup\nnbackup.exe copy -i C:\TEST\ -o con: -v -s -d
nnBackup. V 3.01 RC9 Build 139 2009-03-25 11:10
Copyright (C) 2001-2010 nnSoft. nemtsev@nncron.ru
Зарегистрирован только для некоммерческого использования
Registered for non-commercial use only
Fr 16.Apr.2010 09:14 Start copy
Fr 16.Apr.2010 09:14 C:\TEST\List.txt
Fr 16.Apr.2010 09:14 ERROR # 123: C:\TEST\List.txt ==> con:\List.txt: Синтаксическая ошибка в имени файла, имени папки или метке тома.
Может кто знает что не нравится nnbackup?

А так "вкусно" получилось бы - доступны любые ключи атрибутов/дат/размеров. Через nncron под нужным пользователем только авторизоваться оставалось бы и использовать его для "тонкой" настройки командной строки типа расчета времени для ключей, не поддерживающих относительные даты...
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Удаление файлов

Postby elos » Tue, 20 Apr 2010, 13:38

ComeOn wrote:...
Есть т.н. "Общая папка" на предприятии для передачи фалов между сотрудниками. В ней куча папок, на все стоят отдельные разрешения. Требуется каждый месяц удалять в Общей папке и всех ее подкаталогах удалять ВСЕ файлы, но каталоги оставлять.
...

Вот чувствовал, что где-то рядом... Сначала почитал про null и понял что был неправ.
/dev/null is a special file, not a directory, so one cannot move files into it with the Unix mv command. The rm command is the proper way to delete files in Unix.

Далее плавно перешёл к Naming Files, Paths, and Namespaces. Вскользь просмотрел и зацепился взглядом за ссылку на WinObj. Решил попробовать и увидел в разделе GLOBAL?? для имени NUL симлинк \device\null
Пробуем задействовать это дело!
Сначала смотрим что у нас в тестовой папке:
Code: Select all
dir C:\TEST /s > c:\dir_before.txt
Том в устройстве C имеет метку SYSTEM
Серийный номер тома: 38FE-E769

Содержимое папки C:\TEST

20.04.2010 13:41 <DIR> .
20.04.2010 13:41 <DIR> ..
12.04.2010 08:33 1 213 List.txt
20.04.2010 13:41 <DIR> TEST1
1 файлов 1 213 байт

Содержимое папки C:\TEST\TEST1

20.04.2010 13:41 <DIR> .
20.04.2010 13:41 <DIR> ..
13.03.2009 05:02 87 587 DSC00552.JPG
20.04.2010 13:41 <DIR> TEST2
1 файлов 87 587 байт

Содержимое папки C:\TEST\TEST1\TEST2

20.04.2010 13:41 <DIR> .
20.04.2010 13:41 <DIR> ..
16.04.2010 08:14 0 20100416.txt
19.09.2006 11:37 1 145 getmail.tab
2 файлов 1 145 байт

Всего файлов:
4 файлов 89 945 байт
8 папок 22 732 920 832 байт свободно

Теперь команда
Code: Select all
nnbackup.exe copy -i C:\TEST -o \device\null -v -s -d -stat > test_device_null.txt

nnBackup. V 3.01 RC9 Build 139 2009-03-25 11:10
Copyright (C) 2001-2010 nnSoft. nemtsev@nncron.ru
Зарегистрирован только для некоммерческого использования
Registered for non-commercial use only
Tu 20.Apr.2010 13:45 Start copy
Tu 20.Apr.2010 13:45 C:\TEST\List.txt
Tu 20.Apr.2010 13:45 C:\TEST\TEST1\DSC00552.JPG
Tu 20.Apr.2010 13:45 C:\TEST\TEST1\TEST2\20100416.txt
Tu 20.Apr.2010 13:45 C:\TEST\TEST1\TEST2\getmail.tab
Tu 20.Apr.2010 13:45 Stop copy
Tu 20.Apr.2010 13:45 Files: 4
Tu 20.Apr.2010 13:45 Dirs: 0
Tu 20.Apr.2010 13:45 Bytes: 89945

Cмотрим, что получилось:
Code: Select all
dir C:\TEST /s > c:\dir_after.txt

Том в устройстве C имеет метку SYSTEM
Серийный номер тома: 38FE-E769

Содержимое папки C:\TEST

20.04.2010 13:45 <DIR> .
20.04.2010 13:45 <DIR> ..
20.04.2010 13:45 <DIR> TEST1
0 файлов 0 байт

Содержимое папки C:\TEST\TEST1

20.04.2010 13:45 <DIR> .
20.04.2010 13:45 <DIR> ..
20.04.2010 13:45 <DIR> TEST2
0 файлов 0 байт

Содержимое папки C:\TEST\TEST1\TEST2

20.04.2010 13:45 <DIR> .
20.04.2010 13:45 <DIR> ..
0 файлов 0 байт

Всего файлов:
0 файлов 0 байт
8 папок 22 733 012 480 байт свободно

Видим, что файлы мы успешно потёрли, оставив папки в неприкосновенности

Возвращаемся к задаче nncron:
Code: Select all
#( copy_to_con
NoActive
AsLoggedUser
\ LoadProfile
\ User: "XXXXXXXX" SecPassword: "xxxxxxxx" Domain: "********"
\ поможет авторизоваться с максимальными привилегиям при необходимости
Action:
StartIn: "C:\nnBackup"
ShowNormal   NormalPriority
START-APP: C:\nnBackup\nnbackup.exe copy -i C:\TEST -o \device\null -v -s -d
BEEP: 500 500
)#


ComeOn wrote:...
Возможно потом надо будет добавить исключения - папки, которые очищать не надо. Но это второй вопрос. Никто не посоветует, как реализовать задачу?
...
Добавляем в командную строку nnbackup ключик -dx masks

ComeOn wrote:...
Усложнили задачу. Надо рубить файлы с возрастом старше 15 дней
...
Туда же ключ -DCLT. Осталось только сформировать дату для него в правильном формате, так как он не поддерживает относительные даты. Руками указать дату - проще некуда, а вот под автомат придется слово выписать, рассчитывающее правильную строку с датой с учетом границы месяца ...

Как итог - все дальнейшие "хотелки" в бльшинстве своём реализуются в одной командной строке (Лучше таки параметры прописать в текстовый файл для оперативной правки и использовать синтаксис @filename). Также не требуется никаких дополнительных плагинов (которые могут у конечного пользователя отсутствовать или быть "не той свежести").
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: Удаление файлов

Postby elos » Tue, 20 Apr 2010, 14:58

Рано обрадовался!
Обнаружил у себя на диске папку C:\device\null и в ней все удалённые файлы соответственно. У меня то для теста мало файлов было, а если бы гигабайты..? Так диска не хватит. Ищем дальше.
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron