これについてたくさん検索しましたが、私の要件を満たす答えが見つからないようです。複数のファイル形式(例:*.mp3、*.aac、*.pdfなど)を簡単に検索する方法が必要です。私はLinuxコマンドを理解しています探すこれはターミナル検索によって行われましたが、私はこれらの特定のニーズに合ったGUIを持つプログラムを望んでいました。 Caja、PCManFMなどと同様に、Nemoファイルマネージャに組み込まれている検索機能を試してみました。私もナマズ(catfish)とサーチモンキー(searchmonkey)を試しました。生産的な結果が得られないようです。どんな助けでも大変感謝します。よろしくお願いします。
答え1
Cの速度が必須ではない場合は、スクリプト言語(Ruby、Pythonなど)をお勧めします。 Cを使用せずに複雑な作業を実行できます。
これが私がやろうとしていることです。
Python-GTKインターフェイスを使用してGUIを作成します。 Gtk.Window、Gtk.VBox(次の2つの項目を保存するため)、入力ファイルタイプの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