Last active
March 6, 2019 11:36
-
-
Save maximal/2387d023534a989cf2b3d68132807b67 to your computer and use it in GitHub Desktop.
Запуск произвольной команды над набором выбранных в файловом менеджере Nautilus файлов
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
## | |
# Запуск произвольной команды над набором выбранных в файловом менеджере Nautilus файлов | |
# | |
# Удобно вешать действия над файлами на горячие клавиши в Линуксе. | |
# | |
# Использование: | |
# Допустим, у нас есть команда или скрипт `/home/user/your/command`, что принимает первым аргументом имя файла для обработки. | |
# Мы хотим запускать эту команду для каждого из выбранных в Наутилусе файлов. | |
# | |
# 1. Копируем этот скрипт себе допустим в `/home/user/run-on-selected.sh`, ставим ему права на запуск. | |
# 2. Заходим в Параметры → Устройства → Клавиатура | |
# 3. Добавляем свою комбинацию клавиш, пишем любое имя, в команде пишем: | |
# /home/user/run-on-selected.sh '/home/user/your/command' | |
# Таким образом можно настроить сколько угодно команд и горячих клавиш. | |
# 4. Готово. | |
# В файловом менеджере выделяем нужные файлы, нажимаем выбранную комбинацию. | |
# В случае проблем смотрим журнал '/tmp/run-on-selected.log | |
# | |
# Зависимости: python3-pyperclip xdotool | |
# Перед использованием надо установить эти. Например, в Debian/Ubuntu: | |
# sudo apt install python3-pyperclip xdotool | |
# | |
# Если команда — текстовый скрипт, то вначале должен быть шебанг, иначе Питон её не запустит. См.: | |
# @link https://stackoverflow.com/questions/27606653/oserror-errno-8-exec-format-error | |
# | |
# @author MaximAL | |
# @since 2019-03-06 | |
# @copyright © MaximAL 2019 | |
# @link https://gist.github.com/maximal/2387d023534a989cf2b3d68132807b67 | |
# @link https://t.me/sijekotech/1853 | |
# @link https://maximals.ru | |
# @link https://sijeko.ru | |
## | |
import subprocess | |
import pyperclip | |
import time | |
import sys | |
import logging | |
from urllib.parse import unquote | |
# Логгер действий | |
formatter = logging.Formatter('@%(asctime)s [%(levelname)s] $%(name)s @%(threadName)s: %(message)s') | |
fhandler = logging.FileHandler('/tmp/run-on-selected.log', mode="a") | |
fhandler.setLevel(logging.DEBUG) | |
fhandler.set_name('file_handle') | |
fhandler.setFormatter(formatter) | |
logger = logging.getLogger(sys.argv[0]) | |
logger.addHandler(fhandler) | |
logger.setLevel(logging.DEBUG) | |
# Поехали! | |
logger.info('Command run') | |
# Недостаточно аргументов (нужна команда для запуска) | |
if len(sys.argv) < 2: | |
print ('Usage: ' + sys.argv[0] + ' ' + '<command>') | |
print ('Runs <command> on every file selected in Nautilus.') | |
print ('<command> argument is mandatory.') | |
logger.error('Error: <command> argument is mandatory') | |
exit(1) | |
command = sys.argv[1] | |
logger.info(command) | |
# Делаем паузу на всякий случай | |
time.sleep(0.5) | |
# Копируем имена файлов в буфер обмена | |
subprocess.call(['xdotool', 'key', 'Control_L+c']) | |
# Для каждого имени файла запускаем команду с аргументом | |
for item in pyperclip.paste().splitlines(): | |
logger.debug([command, item]) | |
out = subprocess.check_output([command, item]) | |
logger.debug(out) | |
logger.info('Command done') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
По-русски / Russian
Я с помощью этого скрипта, например, сделал генерацию папки с фавиконками разных размеров по горячей клавише из выбранной SVG-шки (сам скрипт тут: https://t.me/sijekotech/1614).
Можно подписывать фотки копирайтами, не заходя в графические редакторы и терминалы, ресайзить картинки, конвертировать аудио из FLAC в OGG/MP3 — да и вообще автоматизировать любые рутинные действия.
Спасибо Максу Никитенко за помощь с Питоном.
В Маках похожее делается через Эплскрипт (см. у Бирмана: https://ilyabirman.ru/meanwhile/all/resize-window-applescript/, https://ilyabirman.ru/meanwhile/all/apple-shortcuts-rant/ и т. п.). Сам язык довольно хреновый, но зато там всё в одной экосистеме: и файловый менеджер, и оконный, и вся остальная ОС — так что там можно бо́льше такого наворотить с меньшими затратами. А в Линуксе всё независимыми компонентами, поэтому приходится такие связки придумывать.