Автозапуск программы всякий раз, когда файл добавляется в папку
У меня 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) для просмотра определенной папки и выполнения (определенных) действий, если в нее добавлен новый файл.
устанавливать
inotify-toolssudo apt-get install inotify-toolsВставьте приведенный ниже скрипт в пустой файл, установите папку для просмотра ("/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 будет спрашивать вас, где сохранить файл, и вы сможете выбрать предпочитаемую папку.