Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Помогите оптимизировать или переписать код для скрипта Nautilus.  (Прочитано 881 раз)

0 Пользователей и 1 Гость просматривают эту тему.

adawdp

  • Автор темы
  • Гость
— Задача описана в этой теме https://forum.ubuntu.ru/index.php?topic=237798.msg1866716#msg1866716
— Я не IT специалист совсем, я гидромеханизатор по специальности, что не очень родственно :)
— „Изваял“ следующий скрипт
#!/bin/bash
echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's/\ \//\ \/\//g' | sed "s/\ \//\n/g" | xsel -ib
— Сим творением я достиг того, что по ПКМыши Nautilus выдаёт список полных путей выделенных файлов в буфер обмена который открывается по Ctrl+V.
— Sed я применил чтобы построить выдачу скрипта  в столбик. Я исходил из того, что разрыв строки можно делать путём замены „пробел/“  на разрыв строки. Чтобы в полученных путях не исчезал начальный „/“ я предварительно заменил „пробел/“ на „пробел//“
— Вроде всё работает, но мне кажется, что подобное решение напоминает ремонт водопровода с помощью изоленты :).
— Если такое решение нормальное, что у меня вызывает сильное сомнение, то подтвердите, а вообще хотелось бы чего-то покрасивее и правильнее! Подскажите пожалуйста.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
А зачем Вы меняете "пробел/" когда достаточно заменить сам "пробел"?

Вам не кажется что по поводу улучшения скрипта/придания ему дополнительных возможностей лучше общаться с его автором?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
Azure, понимаете, дело в том, что в именах файлов могут быть пробелы, и тогда имена файлов порвутся на „куски“ так как пробел будет меняться на перевод строки, а замена „пробел/“ на перевод строки мне показалась более надёжной. Я не создаю файлов с пробелами или стараюсь не создавать. Но дело в том, что приходится обрабатывать чужие файлы.
— А если будет путь к файлу /media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07 1100-TTONAWANDA LIGHTNING VS OAKVILLE GENERALS GROUP 5
перевод строки по пробелу внесёт путаницу.
— Ну ещё такой гипотетический вариант  /media/MYCOP(пробел)/000_2014~(01)Jan~ApxuBbl(пробел)/ когда пробел в конце имени папки, если такое вообще возможно, тогда и предложенный мною вариант не сработает.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Я же положил Вам скрипт с экранировкой пробелов, оставляя не экранированный только между отдельными аргументами. Вот не экранированный и меняйте на \n
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
— Имеются следующие файлы не мои, такие я получил.(Компания которая делает фото хоккейных матчей любых команд)
• /media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-06 1720-OAKVILLE GENERALS VS ERINDALE SPITFIRES-GROUP 5
• /media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07 1100-TTONAWANDA LIGHTNING VS OAKVILLE GENERALS GROUP 5
— Применяем предложенный Вами скрипт:
echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's/ [^/]/\\&/g' | xsel -i— Получаем:
• /media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-06\ 1720-OAKVILLE\ GENERALS\ VS\ ERINDALE\ SPITFIRES-GROUP\ 5 /media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07\ 1100-TTONAWANDA\ LIGHTNING\ VS\ OAKVILLE\ GENERALS\ GROUP\ 5
— Отделяем одну ссылку пробуем по ней перейти, например введя в адресную строку Firefox. Перехода, естественно, нет (экранирование пробелов наверное не для этого случая).

— Ну а если просто пробел заменить на разрыв строки:
# echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's/ [^/]/\\&/g' | sed "s/\ /\n/g" | xsel -ib— Тогда получим
(Нажмите, чтобы показать/скрыть)
— Ну, а как я этого попытался избежать изложено в начальном сообщении.



Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
  • Внятно поясняйте что и для чего Вам надо. Если для FF, то используется не «$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS», а «$NAUTILUS_SCRIPT_SELECTED_URIS» и тогда вообще ничего заменять/экранировать не надо.
  • Я же Вам написал не все пробелы, а только не экранированные
sed 's/ [^/]/\\&/g ; s/\([^\]\) /\1\n/g'
  • И подумайте куда Вам нужно переносить, так как изначально переменная разделяет адреса переводами строк, это echo их убирает. Для исправления достаточно аргумент взять в кавычки. Можете убедиться заменив всё на zenity
zenity --info --text="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" --title='Путь файла(ов)'
« Последнее редактирование: 26 Января 2014, 19:24:55 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
Azure, я Вас приветствую! Надеюсь я Вас не сильно утомляю :)! Спасибо за участливость!
— «— Но Вы понимаете, сейчас стоит задача кое-что систематизировать (использую ZIM) и нужно сохранять ссылки на файлы, хранящиеся на диске, вот и хотелось быстро получать полные пути»,- я объяснял ранее зачем мне нужны были полные пути к файлам. В ZIM'e одинково осуществляется переход.
/media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07 1100-TTONAWANDA LIGHTNING VS OAKVILLE GENERALS GROUP 5/img_9599.jpg
file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9599.jpg
— Firefox'y тоже всё равно. Но чтобы было „внятно :)“, остановимся на полном пути к файлу!
echo $NAUTILUS_SCRIPT_SELECTED_URIS | sed 's/ [^/]/\\&/g ; s/\([^\]\) /\1\n/g' | xsel -ibвыдаётfile:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9599.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9600.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9601.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9602.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9603.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9604.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9605.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9606.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9607.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9608.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9609.jpg\ file:///media/MYCOP/000_2014~(01)Jan~ApxuBbl/12-07%201100-TTONAWANDA%20LIGHTNING%20VS%20OAKVILLE%20GENERALS%20GROUP%205/img_9610.jpg— О том, что такое zenity для чего оно предназначено и как его применить в данной ситуации я пока читаю…

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
А Вы упрямо не читаете что Вам пишут
используется не «$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS», а «$NAUTILUS_SCRIPT_SELECTED_URIS» и тогда вообще ничего заменять/экранировать не надо.
echo $NAUTILUS_SCRIPT_SELECTED_URIS | sed 's/ /\n/g' | xsel -ib
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
Azure, спасибо, считаю вопрос решённым! Буду пользоваться, углубляться в детали не буду :)!

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
А если я и сам не забыл, то должно работать (оставлять переносы) и такecho "$NAUTILUS_SCRIPT_SELECTED_URIS" | xsel -ib
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

adawdp

  • Автор темы
  • Гость
Azure, ещё раз спасибо, прямо спасибищище :), это уже совершенство, ибо отнять от кода уже  нечего, а он работает! Совершенство конструкции достигается не тогда, когда к ней нечего добавить, а тогда когда уже нечего отнять иначе перестанет работать :)!
(Нажмите, чтобы показать/скрыть)

 

Страница сгенерирована за 0.031 секунд. Запросов: 25.