每当文件添加到文件夹时自动启动程序

每当文件添加到文件夹时自动启动程序

我的笔记本电脑上安装了 Lubuntu 14.04 LTS 已经几个星期了。我一直在对操作系统进行大量自定义,并安装日常使用所需的一切。我做的一件事是编写一个 C 程序,运行时,它可以快速将任何文件从下载文件夹复制或移动到任何位置。可以轻松添加新目的地。

无论如何,我这样做是因为我将文件从“下载”文件夹分散到各处,因此更改 Firefox 中的默认下载位置实际上并不是答案。相反,我希望能够根据具体情况进行选择。该程序运行良好,但是,我想将其设置为在文件下载到“下载”文件夹时在终端中自动运行。

答案1

有几种解决方案:

选项 1:无需安装其他软件:

你可以使用一个小脚本来监视下载文件夹,就像命令watch一样,但要确保它只在文件添加到目录中。将下面的脚本复制到一个空文件中,设置要监视的文件夹的路径,以及在文件添加到目录中时要运行的命令。将其另存为watch.py并使其可执行以方便使用(这样您就不必使用语言前缀)。将其添加到您的启动应用程序中:

- 在 Lubuntu 中:

首选项 > LXSession 的默认应用程序,然后选择“自动启动”

- 或者在 Ubuntu 中:

系统设置 > 键盘 > 快捷键 > 自定义快捷键

添加登录时启动脚本的命令:

/path/to/watch.py

剧本:

#!/usr/bin/env python

import subprocess
import time

folder = "/path/to/folder/to/watch"
command_to_run = "command_to_run"

def get_drlist():
    return subprocess.check_output(["ls", folder]).decode('utf-8').strip().split("\n")

while True:
    drlist1 = get_drlist()
    time.sleep(2)
    drlist2 = get_drlist()
    if len(drlist2) > len(drlist1):
        subprocess.Popen(["/bin/bash", "-c", command_to_run])

选项 2:使用 inotify-tools:

inotify-tools是一个您可以用来(ao)监视定义的文件夹并在文件夹中添加新文件时采取(定义的)操作的工具。

  1. 安装inotify-tools

    sudo apt-get install inotify-tools
    
  2. 将下面的脚本粘贴到一个空文件中,设置要监视的文件夹(“/path/to/your/downloadfolder”),定义它应该运行的命令(“command-to-run-your-application”)并将其安全设置为notifyscript.sh,为方便起见使其可执行,然后将它添加到您的启动应用程序中:(首选项> LXSession 的默认应用程序,然后选择“自动启动”。添加命令:

    /path/to/notifyscript.sh
    

剧本:

#!/bin/bash

while true
do
    fileName=$(inotifywait -r -e create /path/to/your/downloadfolder | sed -r 's/^.*CREATE(,ISDIR)*\s+(.*)$/\2/g')
    command-to-run-your-application
done

请注意,在这两种情况下,您的应用程序将在文件创建时被调用,但尚未完全下载。如果下载很大,则可能需要一些时间。


编辑

此外,如果新添加的文件必须用作争论对于添加文件时运行的命令,请使用以下版本:

它使用以下格式:

<application> <file>

所以“通常”。作为示例,我离开了gedit,因此脚本将(尝试)使用 gedit 打开新添加的文件。

#!/usr/bin/env python

import subprocess
import time

folder = "/path/to/folder/to/watch"
application = "gedit"

def get_drlist():
    return subprocess.check_output(["ls", folder]).decode('utf-8').strip().split("\n")

while True:
    drlist1 = get_drlist()
    time.sleep(2)
    drlist2 = get_drlist()
    for file in [f for f in drlist2 if not f in drlist1]:
            command = application+" '"+folder+"/"+file+"'"
            subprocess.Popen(["/bin/bash", "-c", command])

答案2

尝试检查“总是询问我文件保存在哪里“ firefox 菜单General选项卡中的选项。preference

每次您要求下载文件时,Firefox 都会询问您将文件保存在哪里,然后您可以选择喜欢的文件夹。

相关内容