miner7 10 Опубликовано: 22 августа, 2021 Привет, мир! Мой первый пост на этом форуме, и первый скрипт, хоть сколько-то дописанный до конца) Для интереса было решено написать небольшую утилиту поиска. Алгоритм простой: рекурсивно перебирать все файлы, начиная с рабочей директории; если найдено совпадение с запросом - добавить в таблицу результатов. Буду благодарен за любую конструктивную критику) Установка: Скрытый текст pastebin get 6WM5ufWE /bin/where-is.lua Код: Скрытый текст local fs = require("filesystem") local shell = require("shell") local args, opts = shell.parse(...) local pwd = shell.getWorkingDirectory() if #args < 1 then error("Not enough arguments") end if pwd ~= "/" then pwd = pwd.."/" end Queue = {} Queue.__index = Queue function Queue:new(firstValue) local obj = {firstValue, first = 1, last = 1} setmetatable(obj, self) return obj end function Queue:push(value) local last = self.last + 1 self.last = last self[last] = value end function Queue:shift() local first = self.first if first > self.last then error("queue is empty") end local value = self[first] self[first] = nil self.first = first + 1 return value end local queue = Queue:new(pwd) local results = {} while queue.last >= queue.first do local currentDir = queue:shift() for file in fs.list(currentDir) do local filePath = currentDir..file if string.find(file, args[1]) then results[#results+1] = filePath end if fs.isDirectory(filePath) and not string.find(file, "mnt") then queue:push(filePath) end end end print("Found " .. #results .. " file(s)") for i,v in ipairs(results) do print(" - "..v) end 4 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 22 августа, 2021 За изобретение велосипеда лайк. А нужный функционал уже реализован утилитой find.lua в OpenOS: find / --name=*find* 2 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
miner7 Автор темы 10 Опубликовано: 22 августа, 2021 (изменено) @eu_tomat , хех) Кроме того, я ещё и не знал про существование shell.resolve Изменено 22 августа, 2021 пользователем miner7 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 22 августа, 2021 3 минуты назад, miner7 сказал: А им можно весь диск обойти? Так при указании корневой директории в качестве стартового пути вся смонтированная файловая система и обходится. В моём примере так и задано. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах