如何在一次搜索中找到多种文件类型?

如何在一次搜索中找到多种文件类型?

我对此进行了大量搜索,但似乎找不到满足我需求的答案。我想要一种简单的方法来搜索两种或更多文件类型(例如 *.mp3、*.aac、*.pdf 等)。我了解 Linux 命令寻找通过终端搜索来完成此操作,但我想要一个带有 GUI 的程序来满足这种特殊需求。我尝试过 Nemo 文件管理器的内置搜索,Caja、PCManFM 等也同样如此。我还尝试过鲶鱼和searchmonkey。我似乎无法获得任何富有成效的结果。非常感谢任何帮助。提前致谢。

答案1

除非您确实需要 C 的速度,否则我会推荐一种脚本语言(Ruby、Python 或类似语言)。您将能够完成复杂的任务,而无需使用 C 语言(请不要火焰)。

这就是我要做的:

  • 使用Python-GTK界面制作GUI:您只需要4个小部件:一个Gtk.Window,一个Gtk.VBox(用于存储接下来的两项),一个用于输入文件类型的Gtk.Entry,以及一个Gtk.TreeView显示结果

  • 在 Python 中,您可以轻松地将 Gtk.Entry 中的列表与命令find+ 选项 + 文件类型组合起来,以获取列表。 (您可以执行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))

GUI 查找器的视图

手动的:

  1. 检查您是否安装了 Python3 ( python -V)。如果没有,请安装它。
  2. 将上面的程序另存为pyfind.py
  3. 使其可执行chmod 755 pyfind.py
  4. 执行它./pyfind.py
  5. 输入过滤器,然后按 Enter。
  6. 如果更改路径,请重复 1(如果需要,可以通过使用来自 FileChooserButton 的信号来避免这种情况)

编辑2

我不确定你的情况发生了什么,但日志显示 python3 找不到 pyfind.py 文件。您可以使该文件直接可执行:

将第一行代码修改为:

#!/usr/local/bin/python3

要使上述文件可执行,请执行以下操作(在终端窗口中,在 pyfind.py 所在的目录中):

chmod 755 pyfind.py

然后您应该能够像这样简单地执行程序(同样,在终端中):

./pyfind.py

相关内容