web-dev-qa-db-fra.com

Script Bash pour glisser et déposer un fichier vers un nouvel emplacement

Je suis sûr que je vais me faire péter le cul pour cette question, mais je n'arrive pas à comprendre. Je suis novice dans le scripting, alors calmez-vous ...

Je veux pouvoir glisser-déposer un fichier sur une application de bureau, qui appelle ensuite un script bash qui déplacera ce fichier vers un emplacement désigné dans le script bash. Voici ce que vous avez jusqu'ici.

Script Bash

#! /bin/bash

mv $file /path/to/new/directory

Cependant, je ne vois pas comment entrer le $file en tant que variable lorsque je le ferai glisser vers une application de bureau. Comment puis-je faire ceci?

Raison: j'ai des papiers que je dois lire dans un dossier, et une fois que je les ai lus, je les range dans un autre dossier. Je veux simplement que ce soit facile à faire.

Merci Paul

8
PaulFrater
  1. Créez un fichier script bash avec le contenu suivant:

    #!/bin/bash
    mv "$1" "PATH_TO_NEW_DIRECTORY"
    
  2. Créez un fichier .desktop avec le contenu suivant:

    [Desktop Entry]
    Name=Document Mover
    Exec=PATH_TO_SCRIPT_FILE %U
    Type=Application
    
  3. Changez PATH_TO_NEW_DIRECTORY et PATH_TO_SCRIPT_FILE à votre guise.

  4. Faire chmod +x script_name

  5. Faites glisser les fichiers vers le fichier .desktop.

  6. Terminé!.

24
Slug45

Pas besoin de script. Créez un lien vers PATH_TO_NEW_DIRECTORY où vous en avez besoin. Puis faites glisser le fichier sur le lien

14
Jean-Marie

Ce que @ Slug45 a dit est tout à fait correct. Cependant, il manque une explication.

Lorsque vous faites glisser un fichier sur un fichier exécutable (ou un lien vers un fichier), cet exécutable est exécuté avec le chemin d'accès au fichier déplacé en tant qu'argument. C’est exactement la même chose sous Windows (ce n’est pas le cas ici).

Bash a un moyen simple de gérer les arguments. Utilisez "$@" (avec les guillemets) pour obtenir un tableau de tous les arguments (utile par exemple dans une boucle for..in). $@, "$*" et $* font des choses similaires, mais vous voulez presque toujours "$@". Voir ici pour plus d'informations sur les détails.

De plus, vous pouvez accéder directement à des arguments spécifiques sous la forme $X, où X est le numéro de l'argument. Par exemple:

$ cat ./args.sh
echo $1
echo $2
echo $3
$ ./args.sh foo bar baz
foo
bar
baz
$

Dans les gros scripts, il est préférable d'affecter ceux-ci aux variables nommées:

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

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

mplayer ~/Music/$ARTIST/$ALBUM/$SONG.mp3
3
Duncan X Simpson