Bash Script para arrastar e soltar um arquivo para um novo local

8

Tenho certeza de que vou receber minha bunda para mim para essa pergunta, mas não consigo entender. Eu sou novo no bash scripting, então fique tranquilo comigo ...

Eu quero poder arrastar e soltar um arquivo em um aplicativo de desktop, que chama um script bash que moverá esse arquivo para um local designado no script bash. Aqui está o que tem até agora.

Script de bash

#! /bin/bash

mv $file /path/to/new/directory

No entanto, não consigo descobrir como inserir o $file como uma variável quando arrasto e solto em um aplicativo de área de trabalho. Como posso fazer isso?

Motivo: tenho documentos que preciso ler em uma pasta e, depois de lê-los, coloco-os em outra pasta. Eu basicamente só quero facilitar isso.

Obrigado Paul

    
por PaulFrater 04.04.2016 / 12:54

3 respostas

25
  1. Crie um scriptfile bash com o seguinte conteúdo:

    #!/bin/bash
    mv "" "PATH_TO_NEW_DIRECTORY"
    
  2. Crie um arquivo .desktop com o seguinte conteúdo:

    [Desktop Entry]
    Name=Document Mover
    Exec=PATH_TO_SCRIPT_FILE %U
    Type=Application
    
  3. Altere PATH_TO_NEW_DIRECTORY e PATH_TO_SCRIPT_FILE ao seu gosto.

  4. Fazer chmod +x script_name

  5. Arraste os arquivos para o arquivo .desktop.

  6. Feito!.

por Slug45 04.04.2016 / 13:07
14

Não há necessidade de um script. Crie um link para PATH_TO_NEW_DIRECTORY onde você precisar. Em seguida, arraste o arquivo para o link

    
por Jean-Marie 04.04.2016 / 15:29
2

O que o @ Slug45 disse está completamente correto. No entanto, falta uma explicação.

Quando você arrasta e solta um arquivo em um arquivo executável (ou um link para um), esse executável é executado com o caminho para o arquivo arrastado como um argumento. Isso é exatamente o mesmo no Windows (não que isso realmente importe aqui).

O Bash tem uma maneira simples de lidar com argumentos. Use "$@" (com as aspas) para obter uma matriz de todos os argumentos (útil, por exemplo, em um loop for..in). $@ , "$*" e $* fazem coisas semelhantes, mas você quase sempre deseja "$@" . Consulte aqui para obter mais informações sobre os detalhes.

Além disso, você pode acessar diretamente argumentos específicos como $X , em que X é o número arg. Por exemplo:

$ cat ./args.sh
echo 
echo 
echo 
$ ./args.sh foo bar baz
foo
bar
baz
$

Em scripts grandes, é melhor atribuí-los a variáveis nomeadas:

$ cat music.sh
#!/bin/bash
# Usage: ./music.sh Artist Album Song
ARTIST=
ALBUM=
SONG=

if [ $ARTIST -eq "Nickelback" ]; then exit; fi

mplayer ~/Music/$ARTIST/$ALBUM/$SONG.mp3
    
por Duncan X Simpson 07.04.2016 / 20:14