Решил я описать скрипт по логике которого, нужно было раскидывать файлы по папкам, и тут выясняется что нельзя взять и создать каталог О_О.
В интернетах предлагают такой вариант
/tool fetch dst-path=MyPath/xxx url="http://127.0.0.1/"
Или такой
/tool fetch dst-path=MyPath/xxx url="http://google.com/"
Но у меня не работает такое, в такой вариант прокатил
/tool fetch dst-path=MyPath/xxx url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Чтобы файл не скачивался, вместо xxx ставим точку
/tool fetch dst-path=MyPath/. url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Поддиректории через слеш
/tool fetch dst-path=MyPath/subFolder/. url="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Но такой вариант мне не нравится из-за ненадежности источника скачивания, и я нашел вариант через SMB
/ip smb shares add name=test directory=MyPath
/ip smb shares remove [/ip smb shares find where name=test]
Т.о. для создания структуры, можно описать таким образом
/ip smb shares add name=test directory=MyPath
/ip smb shares set [/ip smb shares find where name=test] name=test directory=MyPath/subFolder
/ip smb shares set [/ip smb shares find where name=test] name=test directory=MyPath/subFolder/subfolder
/ip smb shares remove [/ip smb shares find where name=test]
А как быть, если заранее нельзя определить структуру каталогов? При таком подходе Mikrotik не понимает рекурсии, да и не выдает никаких ошибок. Именно для таких случаев были описаны две простенькие функции:
:global FullPath ""
:global CreateFolder do={
:global FullPath
:put ("Create folder with name \"".$NewPath."\"")
if ($FullPath="") do={
:set FullPath $NewPath
} else={
:set FullPath ($FullPath."/".$NewPath)
}
if ([:len [/file find where name=$crtCnfFullPath]]=0) do={
do {
/ip smb shares add name=CreateFolder directory=$FullPath
} on-error={
:put "Create folder failed"
}
/ip smb shares remove [/ip smb shares find where name=CreateFolder]
} else={
:put "Path is exist"
}
:put ("Current full path \"".$FullPath."\"")
}
:global CreateTree do={
:global CreateTree
:global CreateFolder
if ([:len $1]>0) do={
$CreateFolder NewPath=$1
$CreateTree $2 $3 $4 $5 $6 $7 $8 $9
}
}
# Call function
$CreateTree "folder" "sub_folder" "sub_sub_folder" "sub_sub_sub_folder";
:delay 1
/system script environment remove CreateTree
/system script environment remove CreateFolder
/system script environment remove FullPath
Данный подход может создать структуру глубиной 10, но вложенность друг в друга. Вариант с полноценной структурой описывать не буду, но решается на раз при помощи массивов. Собственно и здесь можно было использовать массив, но мне не захотелось
Кстати, при создании файлов через:
/file print file=conf.ovpn
будет создан файл с расширением txt в любом случае, костыль:
/tool fetch dst-path=conf.ovpn url="http://127.0.0.1/"
Комментариев нет:
Отправить комментарий