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

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

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

3
задан 2 December 2014 в 00:35

2 ответа

Существует несколько решений:

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

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

- в Lubuntu:

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

- или в 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-инструментов:

inotify-tools инструмент, который можно использовать (a.o). наблюдать определенную папку и принять (определенные) меры, если новый файл добавляется к папке.

  1. Установка inotify-tools

    sudo apt-get install inotify-tools
    
  2. Вставьте сценарий ниже в пустом файле, установите папку, чтобы смотреть ("/path/to/your/downloadfolder"), определить команду, это должно выполнить ("command-to-run-your-application") сейф это как notifyscript.sh, сделайте это исполняемым файлом по причинам удобства и добавьте его к своим приложениям запуска: (Предпочтения> приложения По умолчанию для LXSession, затем выберите "Autostart". Добавьте команду:

    /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])
3
ответ дан 1 December 2019 в 16:00

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

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

1
ответ дан 17 November 2019 в 10:22

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

Похожие вопросы: