Я сделал небольшой скрипт 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 после тестирования)
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-оболочку для приложения, который выглядит примерно так:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
Вы можете заменить your_program
там на $@
и запустите скрипт с вашей_программой в качестве аргумента, например run-in-dir.sh your_program
. Таким образом, вы можете использовать один и тот же сценарий для переноса любой программы, которую вы хотите запустить в этом каталоге.
Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k
Я использовал это:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.
Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
% k будет заменен на путь самого файла рабочего стола. Команда dirname
отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command
может быть вызван без полного пути.
Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k
Я использовал это:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.
Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
% k будет заменен на путь самого файла рабочего стола. Команда dirname
отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command
может быть вызван без полного пути.
Я использовал это:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.
Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k
Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
% k будет заменен на путь самого файла рабочего стола. Команда dirname
отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command
может быть вызван без полного пути.
Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k
Я использовал это:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.
Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
% k будет заменен на путь самого файла рабочего стола. Команда dirname
отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command
может быть вызван без полного пути.
Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k
Я использовал это:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.
Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
% k будет заменен на путь самого файла рабочего стола. Команда dirname
отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command
может быть вызван без полного пути.
Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k
Я использовал это:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
% k - полное имя файла .desktop, включая его путь. Затем он используется dirname для получения местоположения и изменения каталога в этом месте. Наконец, теперь, когда он находится в правильном месте, он находит скрипт и запускает его.
Вы можете клонировать вокруг этого, используя встроенный мини-скрипт bash в Exec. Это добавит путь файла .desktop к PATH до запуска вашей команды.
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
% k будет заменен на путь самого файла рабочего стола. Команда dirname
отрывает часть имени файла, оставляя только каталог. Когда PATH установлен так, your_command
может быть вызван без полного пути.
Для имен каталогов с пробелами в имени это, в конечном счете, сработало для меня:
Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k