Как я могу установить переменную «Path» в файле .desktop относительно местоположения, где находится файл рабочего стола?

Я сделал небольшой скрипт bash для этого, упрощенного и улучшенного благодаря комментариям OP, @dannysauer, @Arronical и @Scott

#!/bin/bash
for file in *
  do mkdir -p "${file%%[.-]*}" 2>/dev/null
    if [[ -d "${file%%[.-]*}" ]]; then
       if [[ -f "$file" ]]; then
         echo mv -v -- "$file" "${file%%[.-]*}"
       fi
    fi
done

Сначала запустите с echo, а затем удалите [ f4] для фактического перемещения файлов. Сценарий должен запускаться из каталога, в который вы хотите переместить файлы. Если вы предпочитаете, здесь это как однострочная команда:

for file in *; do mkdir -p "${file%%[.-]*}"; if [[ -d "${file%%[.-]*}" ]]; then if [[ -f "$file" ]]; then echo mv -v -- "$file" "${file%%[.-]*}"; fi ; fi ; done

(снова удалите echo после тестирования)

Объяснение:

for file in *; do mkdir -p "${file%%[.-]*}" создать каталог с именем первой части имени каждого файла (до первого символа дефиса или точки). Флаг -p здесь очень важен - без него скрипт будет перемещать только первый соответствующий файл (спасибо Arronical за указание, что -p остановит mkdir попытку создания существующих каталогов и жалуется на это) 2>/dev/null сценарий жалуется, что он не может создать каталог с тем же именем, что и он сам (но все же работает) поэтому мы выбрасываем ошибку - это не требуется при работе как однострочный if [[ -d "${file%%[.-]*}" ]]; then, если есть каталог с таким именем (если mkdir был успешным), тогда ... if [[ -f "$file" ]], если мы имеем дело с файлом (не каталогом или чем-то еще), тогда ... mv -v -- "$file" "${file%%[.-]*}" переместите его в соответствующий каталог.
10
задан 16 May 2012 в 15:04

44 ответа

Я использовал это:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.

2
ответ дан 4 August 2018 в 19:18

Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k будет заменен на путь самого файла рабочего стола. Команда dirname отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command может быть вызван без полного пути.

11
ответ дан 4 August 2018 в 19:18

Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Кредит https://unix.stackexchange.com/a/144428/61349

0
ответ дан 6 August 2018 в 03:31

Я использовал это:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.

2
ответ дан 6 August 2018 в 03:31

Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k будет заменен на путь самого файла рабочего стола. Команда dirname отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command может быть вызван без полного пути.

11
ответ дан 6 August 2018 в 03:31

Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Кредит https://unix.stackexchange.com/a/144428/61349

0
ответ дан 7 August 2018 в 21:19

Я использовал это:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.

2
ответ дан 7 August 2018 в 21:19

Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k будет заменен на путь самого файла рабочего стола. Команда dirname отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command может быть вызван без полного пути.

11
ответ дан 7 August 2018 в 21:19

Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Кредит https://unix.stackexchange.com/a/144428/61349

0
ответ дан 10 August 2018 в 09:37

Я использовал это:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.

2
ответ дан 10 August 2018 в 09:37

Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k будет заменен на путь самого файла рабочего стола. Команда dirname отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command может быть вызван без полного пути.

11
ответ дан 10 August 2018 в 09:37

Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Кредит https://unix.stackexchange.com/a/144428/61349

0
ответ дан 13 August 2018 в 15:48

Я использовал это:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.

2
ответ дан 13 August 2018 в 15:48

Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k будет заменен на путь самого файла рабочего стола. Команда dirname отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command может быть вызван без полного пути.

11
ответ дан 13 August 2018 в 15:48

Другие вопросы по тегам:

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