Autostart programa sempre que um arquivo é adicionado a uma pasta

3

Eu tenho Lubuntu 14.04 LTS no meu laptop por algumas semanas agora. Eu tenho trabalhado na personalização do sistema operacional e muito, bem como instalar tudo o que eu preciso para o uso diário. Uma coisa que fiz foi escrever um programa em C que, quando executado, se oferece para copiar ou mover rapidamente qualquer arquivo para qualquer local da pasta Downloads. Novos destinos podem ser facilmente adicionados.

Enfim, eu fiz isso porque eu dispersei meus arquivos em todo o lugar da minha pasta Downloads, então mudar o local de download padrão no Firefox realmente não é a resposta. Em vez disso, quero poder escolher caso a caso. O programa funciona bem, no entanto, eu quero configurá-lo para executar automaticamente em um terminal sempre que um arquivo é baixado para a pasta Downloads.

    
por Zeke Legge 31.08.2014 / 20:07

2 respostas

3

Existem algumas soluções:

Opção 1: sem instalar software adicional:

Você pode usar um script secundário para ficar de olho na pasta Downloads, como o comando watch , mas certifique-se de que ele apenas execute um comando quando um arquivo for adicionado ao diretório. Copie o script abaixo em um arquivo vazio, defina o caminho para a pasta a ser assistida e o comando a ser executado se um arquivo for adicionado ao diretório. Salve-o como watch.py e torne-o executável por conveniência (para que você não precise usar o prefixo de idioma). Adicione-o aos seus aplicativos de inicialização:

- em Lubuntu:

Preferências > Aplicativos padrão para o LXSession e escolha "Autostart"

- ou no Ubuntu:

Configurações do sistema > Teclado > Atalhos > Atalhos Personalizados

Adicione o comando para iniciar o script no login:

/path/to/watch.py

O script:

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

Opção 2: usando inotify-tools:

inotify-tools é uma ferramenta que você pode usar (a.o.) para assistir a uma pasta definida e realizar ações (definidas) se um novo arquivo for adicionado à pasta.

  1. Instale inotify-tools

    sudo apt-get install inotify-tools
    
  2. Cole o script abaixo em um arquivo vazio, defina a pasta a ser observada ("/ path / to / your / downloadfolder"), defina o comando que deve ser executado ("command-to-run-your-application") como notifyscript.sh , torne-o executável por conveniência e adicione-o às suas aplicações de inicialização: (Preferências > Aplicações padrão para LXSession, depois escolha "Autostart". Adicione o comando:

    /path/to/notifyscript.sh
    

O script:

#!/bin/bash

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

Observe que, em ambos os casos, seu aplicativo será chamado no momento em que o arquivo for criado, mas ainda não foi totalmente baixado. Se o download for grande, pode levar algum tempo.

EDITAR

Além disso, se o arquivo recém-adicionado precisar ser usado como um argumento para o comando que você executa quando o arquivo é adicionado, use a versão abaixo:

Ele usa o formato:

<application> <file>

então o "usual". Como exemplo, deixei gedit , então o script irá (tentar) abrir o arquivo recém-adicionado com o 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])
    
por Jacob Vlijm 01.09.2014 / 10:09
1

Tente verificar a opção " Sempre me perguntar onde salvar os arquivos " na guia General do menu preference firefox.

Sempre que você solicitar o download do arquivo, o Firefox perguntará onde salvar o arquivo e você poderá escolher sua pasta preferida.

    
por Lety 01.09.2014 / 12:34