Bash Script, щоб перетягнути файл у нове місце


8

Я впевнений, що мені дадуть дупу за це питання, але я просто не можу це зрозуміти. Я новачок у сценічних сценаріях, тож просто на мене ...

Я хочу мати змогу перетягнути файл на настільний додаток, який потім викликає скрипт bash, який перемістить цей файл у місце, визначене в скрипті bash. Ось, що є досі.

Баш сценарій

#! /bin/bash

mv $file /path/to/new/directory

Однак я не можу зрозуміти, як ввести $fileзмінну як перетягуючу її на настільний додаток. Як я можу це зробити?

Причина: у мене є документи, які мені потрібно прочитати в одній папці, і як тільки я прочитав їх, я помістив їх в іншу папку. Я в основному просто хочу зробити це легко.

Спасибі, Пол


2
Я не розумію, чому ти просто не перетягнеш їх, якщо це те, що ти хочеш? Ви, здається, запитуєте, як перетягнути в папку1, що призведе до переміщення перетягнутого елемента в папку 2. Чому б ви просто не перетягнути його безпосередньо в папку2?
тердон

2
Я не знаю жодного файлового менеджера, який дозволяє перетягувати файл на додаток, а потім передавати цей файл додатку, щоб зробити щось із цим. Кожен файловий менеджер, який я використовував, підтримує лише перетягування файлів у папки. Чи є у вас якісь причини вважати, що це можливо? Ви бачили додаток, який працює таким чином? Звичайно, це можна зробити за допомогою веб-програми (яка надає API перетягування і перетягування браузера) або іншого складного типу програми, але це може бути занадто складним для пояснення у відповіді AskUbuntu.
Робін Уінслоу,

1
Хіба це не робить більшість терміналів і файлових менеджерів? У XFCE перетягування файлу з Thunar на термінал вставляє повне ім'я файлу. А перетягування файлу на щось на зразок LibreOffice або Gedit відкриє його (принаймні, спробуйте ). Це здається, що це повністю залежить від програми, щоб робити все, що завгодно, з іменем файлу.
Xen2050

@terdon. Так, я просто хочу перетягнути в іншу папку, але мені хотілося швидкого способу зробити це, не виходячи із каталогу, в якому я був, і перемістити весь шлях у новий каталог, а потім скинути файл туди. Це просто здається мені неефективним. Для всіх інших дивіться відповідь, надану Slug45 нижче.
PaulFrater

Відповіді:


24
  1. Створіть bash 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. Готово !.


1
Слід підкреслити, що завжди потрібно цитувати змінні, як показано. Використання $fileзамість "$file"(або "${file}") може поставити вас в групу проблем.
Падді Ландау

Також тут не потрібно використовувати bash; #!/bin/shдостатньо зробити те ж саме (хоча воно може бути пов'язане з bashбудь-яким чином у багатьох системах).
ckujau

14

Немає необхідності в сценарії. Створіть посилання на PATH_TO_NEW_DIRECTORY там, де вам це потрібно. Потім перетягніть файл на посилання


2
Це було б простішим рішенням (але тоді я б не дізнався чогось про баш сценаріїв :)
PaulFrater

Це "очевидний" спосіб це зробити і відповідає на питання. Але якщо ви використовуєте скрипт, цей скрипт може бути довільно складним і робити різні речі залежно від того, який файл переданий - як, наприклад, розміщення музичних файлів в одне місце та документи в інше місце - або просто зміна пункту призначення, не замінюючи символьне посилання.
Джо

3

Те, що сказав @ Slug45, є абсолютно правильним. Однак йому не вистачає пояснень.

Коли ви перетягуєте файл на виконуваний файл (або посилання на один), цей виконуваний файл запускається зі шляху до перетягнутого файлу як аргумент. Це точно так само і в Windows (не те, що тут насправді має значення).

Bash має простий спосіб поводження з аргументами. Використовуйте "$@" (із цитатами), щоб отримати масив усіх аргументів (корисно, наприклад, у циклі for..in). $@, "$*"і $*роби подібні речі, але ти майже завжди хочеш "$@". Дивіться тут для отримання додаткової інформації про особливості.

Крім того, ви можете безпосередньо отримати доступ до конкретних аргументів, оскільки $XX - номер аргументу. Наприклад:

$ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.