Как я могу установить переменную «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 ответа

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

3
ответ дан 25 July 2018 в 21:45

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

3
ответ дан 26 July 2018 в 16:34

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

3
ответ дан 31 July 2018 в 10:50

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

3
ответ дан 31 July 2018 в 10:55

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

3
ответ дан 31 July 2018 в 11:54

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

3
ответ дан 2 August 2018 в 03:21

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

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

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

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

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

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

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

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

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_program там на $@ и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.

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

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

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

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

0
ответ дан 25 July 2018 в 21:45

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

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

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

2
ответ дан 25 July 2018 в 21:45

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

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

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

11
ответ дан 25 July 2018 в 21:45

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

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

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

0
ответ дан 26 July 2018 в 16:34

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

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

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

2
ответ дан 26 July 2018 в 16:34

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

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

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

11
ответ дан 26 July 2018 в 16:34

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

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

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

2
ответ дан 31 July 2018 в 10:50

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

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

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

0
ответ дан 31 July 2018 в 10:50

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

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

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

11
ответ дан 31 July 2018 в 10:50

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

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

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

0
ответ дан 31 July 2018 в 10:55

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

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

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

2
ответ дан 31 July 2018 в 10:55

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

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

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

11
ответ дан 31 July 2018 в 10:55

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

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

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

0
ответ дан 31 July 2018 в 11:54

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

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

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

2
ответ дан 31 July 2018 в 11:54

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

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

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

11
ответ дан 31 July 2018 в 11:54

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

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

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

0
ответ дан 2 August 2018 в 03:21

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

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

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

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

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

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

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

11
ответ дан 2 August 2018 в 03:21

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

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

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

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

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

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