Автозапуск программы всякий раз, когда файл добавляется в папку

У меня Lubuntu 14.04 LTS на моем ноутбуке уже несколько недель. Я немного занимался настройкой ОС и тому подобного, а также установкой всего, что мне нужно для ежедневного использования. Одна вещь, которую я сделал, это написал программу на C, которая при запуске предлагает быстро скопировать или переместить любой файл в любое место из папки Downloads. Новые направления могут быть легко добавлены.

В любом случае, я сделал это, потому что я разогнал свои файлы повсеместно из папки "Загрузки", поэтому изменение местоположения загрузки по умолчанию в Firefox на самом деле не ответ. Вместо этого я хочу иметь возможность выбирать в каждом конкретном случае. Программа работает нормально, однако я хочу настроить ее автоматический запуск в терминале каждый раз, когда файл загружается в папку "Загрузки".

2 ответа

Решение

Есть несколько решений:

Вариант 1: без установки дополнительного программного обеспечения:

Вы можете использовать второстепенный скрипт, чтобы следить за папкой загрузок, например watch Команда делает, но убедитесь, что она выполняет только команду, когда файл добавляется в каталог. Скопируйте приведенный ниже скрипт в пустой файл, задайте путь к папке, которую вы хотите просмотреть, и команду для запуска, если файл добавлен в каталог. Сохранить как watch.py и сделать его исполняемым по соображениям удобства (чтобы вам не приходилось использовать языковой префикс). Добавьте его в свои приложения запуска:

- в Лубунту:

Настройки> Приложения по умолчанию для LXSession, затем выберите "Автозапуск"

- или в Ubuntu:

Настройки системы> Клавиатура> Сочетания клавиш> Пользовательские сочетания клавиш

Команда add для запуска сценария при входе в систему:

/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])

Попробуйте установить флажок " Всегда спрашивать меня, где сохранять файлы " в General вкладка preference Меню Firefox.

Каждый раз, когда вы просите загрузить файл, Firefox будет спрашивать вас, где сохранить файл, и вы сможете выбрать предпочитаемую папку.

Другие вопросы по тегам