Если вам действительно не нужна скорость C, я бы порекомендовал язык сценариев (Ruby, Python или аналогичный). Вы сможете выполнять сложные задачи без утомительного языка C (пожалуйста, без флейма).
Вот что я бы сделал:
Используйте интерфейс Python-GTK для создания графического интерфейса: вам нужно всего 4 виджета: Gtk.Window, Gtk.VBox (для хранения следующих двух элементов), Gtk .Entry для ввода типов файлов и Gtk.TreeView для отображения результатов
Из Python вы можете легко объединить список из Gtk.Entry и команду find
+ параметры + типы файлов, чтобы получить список. (Вы можете выполнить команду find
из subprocess.checkcall
).
Checkcall
возвращает список, который затем можно отобразить в Gtk.TreeView.
Если вы хотите изучить Python, в сети есть множество отличных руководств. Это официальный учебник на сайте Python . Сайт learnPython очень интересен, так как вы даже можете опробовать свои программы. Этот учебник должен дать вам все необходимое для использования графического интерфейса в Python с большим количеством примеров.
Язык сценариев, такой как Python, идеально подходит для решения проблем, подобных описанной вами.
РЕДАКТИРОВАТЬ У меня было время, и я подумал, что неплохо было бы иметь компактный поисковик с графическим интерфейсом. Ниже рабочий код. Да, он длиннее 20 строк, в основном потому, что я построил весь графический интерфейс в коде. Если бы я использовал Glade (дизайнер графического интерфейса), код уменьшился бы вдвое. Также я добавил диалог для выбора корня поиска.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# test_finder.py
#
# Copyright 2016 John Coppens
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
#
from gi.repository import Gtk
import os, fnmatch
class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.connect("destroy", lambda x: Gtk.main_quit())
self.set_size_request(600, 400)
vbox = Gtk.VBox()
# Pattern entry
self.entry = Gtk.Entry()
self.entry.connect("activate", self.can't open file 'pyfind.py'on_entry_activated)
# Initial path selection
self.path = Gtk.FileChooserButton(title = "Select start path",
action = Gtk.FileChooserAction.SELECT_FOLDER)
self.path.set_current_folder(".")
# The file list + a scroll window
self.list = self.make_file_list()
scrw = Gtk.ScrolledWindow()
scrw.add(self.list)
vbox.pack_start(self.entry, False, False, 0)
vbox.pack_start(self.path, False, False, 0)
vbox.pack_start(scrw, True, True, 0)
self.add(vbox)
self.show_all()
def make_file_list(self):
self.store = Gtk.ListStore(str, str)
filelist = Gtk.TreeView(model = self.store, enable_grid_lines = True)
renderer = Gtk.CellRendererText()
col = Gtk.TreeViewColumn("Files:", renderer, text = 0, sizing = Gtk.TreeViewColumnSizing.AUTOSIZE)
filelist.append_column(col)
col = Gtk.TreeViewColumn("Path:", renderer, text = 1)
filelist.append_column(col)
return filelist
def on_entry_activated(self, entry):
self.store.clear()
patterns = entry.get_text().split()
path = self.path.get_filename()
for root, dirs, files in os.walk(path):
for name in files:
for pat in patterns:
if fnmatch.fnmatch(name, pat):
self.store.append((name, root))
def run(self):
Gtk.main()
def main(args):
mainwdw = MainWindow()
mainwdw.run()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Руководство:
python -V
). Если нет, установите его. pyfind.py
chmod 755 pyfind.py
./ pyfind.py
EDIT2
Я не уверен, что происходит в вашем случае, но журнал говорит, что python3 не находит файл pyfind.py. Вы можете сделать файл непосредственно исполняемым:
Измените первую строку кода на:
#!/usr/local/bin/python3
Чтобы сделать вышеуказанный файл исполняемым, выполните (в окне терминала, в каталоге, где находится pyfind.py is):
chmod 755 pyfind.py
После этого вы сможете выполнить программу просто так (опять же, в терминале):
./pyfind.py