Bash Script для перетаскивания файла в новое место

Я уверен, что мне дадут мне задницу за этот вопрос, но я просто не могу понять это. Я новичок в написании сценариев bash, так что будьте спокойны со мной ...

Я хочу иметь возможность перетаскивать файл в настольное приложение, которое затем вызывает скрипт bash, который переместит этот файл в место, обозначенное в скрипте bash. Вот то, что есть до сих пор.

Скрипт Bash

#! /bin/bash

mv $file /path/to/new/directory

Однако я не могу понять, как ввести $file в качестве переменной, когда перетаскиваю ее в настольное приложение. Как я могу это сделать?

Причина: у меня есть документы, которые мне нужно прочитать в одной папке, и после прочтения я помещаю их в другую папку. Я просто хочу, чтобы это было легко сделать.

Спасибо, Пол.

8
задан 04.04.2016, 23:54

3 ответа

  1. Создают удар scriptfile со следующим содержанием:

    #!/bin/bash
    mv "$1" "PATH_TO_NEW_DIRECTORY"
    
  2. Создают .desktop файл со следующим содержанием:

    [Desktop Entry]
    Name=Document Mover
    Exec=PATH_TO_SCRIPT_FILE %U
    Type=Application
    
  3. Изменение PATH_TO_NEW_DIRECTORY и PATH_TO_SCRIPT_FILE к Вашей симпатии.

  4. Делают chmod +x script_name

  5. , Перетаскивают файлы в .desktop файл.

  6. Сделанный!.

24
ответ дан 29.09.2019, 19:07
  • 1
    Нужно подчеркнуть что Вы всегда потребность заключить переменные в кавычки, как показано. Используя $file вместо "$file" (или "${file}") может получить Вас в "куче" проблемы. – Nitesh 06.04.2016, 03:34
  • 2
    Кроме того, никакая потребность использовать bash здесь; #!/bin/sh достаточно из выполнения того же (хотя это может быть связано с bash так или иначе во многих системах). – Paolo 06.04.2016, 03:42

Никакая потребность в сценарии. Создайте ссылку на PATH_TO_NEW_DIRECTORY, где Вам нужен он. Затем перетащите файл к ссылке

14
ответ дан 29.09.2019, 19:07
  • 1
    Это было бы более легким решением (но тогда я wouldn' t узнали что-то о сценариях удара:) – Paolo 06.04.2016, 03:34
  • 2
    Это - " obvious" способ сделать это и отвечает на вопрос. Но при использовании сценария тот сценарий может быть произвольно сложным и сделать разные вещи в зависимости от того, какой файл он передается - как помещение музыкальных файлов одно место и документы в другом месте - или просто изменение места назначения, не имея необходимость заменять символьную ссылку. – bortzmeyer 08.04.2016, 07:00

Какой сказанный @Slug45 абсолютно корректен. Однако это испытывает недостаток в объяснении.

, Когда Вы перетаскиваете файл на исполняемый файл (или ссылка на одну), тот исполняемый файл выполняется с путем к перетащенному файлу как аргумент. Это - точно то же в Windows (не, что это действительно имеет значение здесь).

Bash имеет простой способ иметь дело с аргументами. Используйте "$@" (с кавычками) для получения массива всех аргументов (полезный, например, в для.. в цикле). $@, "$*", и $* делают подобные вещи, но Вы почти всегда хотите "$@". См. здесь для получения дополнительной информации о специфических особенностях.

, Кроме того, можно непосредственно получить доступ к определенному args как $X, где X число аргумента. Например:

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

В больших сценариях, лучше присвоить сценарии к именованным переменным:

$ 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
ответ дан 29.09.2019, 19:07

Теги

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