이에 대해 많이 검색했지만 내 요구 사항을 충족하는 답변을 찾을 수 없는 것 같습니다. 두 개 이상의 파일 형식(예: *.mp3, *.aac, *.pdf 등)을 쉽게 검색할 수 있는 방법을 원합니다. 나는 리눅스 명령어를 이해한다찾다이는 터미널 검색을 통해 이루어지지만 저는 이러한 특정 요구에 맞는 GUI가 있는 프로그램을 원했습니다. Caja, PCManFM 등과 마찬가지로 Nemo 파일 관리자에 내장된 검색 기능을 사용해 보았습니다. 나는 또한 메기(catfish)와 서치몽키(searchmonkey)를 시험해 보았습니다. 생산적인 결과를 얻을 수 없을 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다. 미리 감사드립니다.
답변1
C의 속도가 꼭 필요한 것이 아니라면 스크립팅 언어(Ruby, Python 등)를 권장합니다. C를 사용하지 않고도 복잡한 작업을 수행할 수 있습니다.
이것이 내가하려는 일입니다.
Python-GTK 인터페이스를 사용하여 GUI를 만드십시오. Gtk.Window, Gtk.VBox(다음 두 항목을 저장하기 위한), 입력 파일 유형을 위한 Gtk.Entry, Gtk .TreeView 디스플레이 등 4개의 위젯만 필요합니다. 결과
Python에서는
find
Gtk.Entry의 목록을 command+options+filetype과 쉽게 결합하여 목록을 얻을 수 있습니다. (find
에서 명령을 실행할 수 있습니다subprocess.checkcall
).
Checkcall
Gtk.TreeView에 표시할 수 있는 목록을 반환합니다.
Python을 배우고 싶다면 온라인에 훌륭한 튜토리얼이 많이 있습니다. 이것은Python 웹사이트의 공식 튜토리얼.Python 배우기 웹사이트자신이 만든 프로그램을 시험해 볼 수도 있기 때문에 정말 재미있습니다. 이 튜토리얼Python에서 GUI를 사용하는 데 필요한 모든 것과 많은 예제를 제공해야 합니다.
Python과 같은 스크립팅 언어는 설명하는 문제를 해결하는 데 적합합니다.
편집하다시간을 좀 보내면서 컴팩트한 GUI 파인더가 있으면 좋겠다고 생각했습니다. 아래는 작업 코드입니다. 예, 20줄보다 깁니다. 주로 코드로 전체 GUI를 구축했기 때문입니다. Glade(GUI 디자이너)를 사용하면 코드가 반으로 잘립니다. 또한 검색 루트를 선택하는 대화 상자를 추가했습니다.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# test_finder.py
#
# Copyright 2016 John Coppens <[email protected]>
#
# 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))
수동:
- Python3이 설치되어 있는지 확인하세요(
python -V
). 그렇지 않은 경우 설치하십시오. - 위 프로그램을 다음과 같이 저장하세요.
pyfind.py
- 실행 가능하게 만들어라
chmod 755 pyfind.py
- 그것을 실행
./pyfind.py
- 필터를 입력하고 Enter를 누르십시오.
- 경로를 변경하는 경우 1을 반복합니다(필요한 경우 FileChooserButton의 신호를 사용하여 이를 방지할 수 있음).
편집 2
귀하의 경우 무슨 일이 일어나고 있는지 잘 모르겠지만 로그에는 python3이 pyfind.py 파일을 찾을 수 없다고 표시됩니다. 파일을 직접 실행 가능하게 만들 수 있습니다.
코드의 첫 번째 줄을 다음과 같이 수정합니다.
#!/usr/local/bin/python3
위 파일을 실행 가능하게 만들려면 다음을 수행하십시오(터미널 창에서 pyfind.py와 동일한 디렉터리):
chmod 755 pyfind.py
그러면 다음과 같이 프로그램을 간단하게 실행할 수 있습니다(역시 터미널에서).
./pyfind.py