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.
-
Instale
inotify-tools
sudo apt-get install inotify-tools
-
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])