Страница 2 из 2
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 10:21
Chocobo
svm писал(а): Caja и Nemo есть такое
CAJA_SCRIPT_SELECTED_FILE_PATHS
NEMO_SCRIPT_SELECTED_FILE_PATHS
На их основе вот такой скрипт у меня получился
Код: Выделить всё
#!/bin/sh
for i in $CAJA_SCRIPT_SELECTED_FILE_PATHS; do
echo $(basename $i) >> ./.hidden
done;
Отрабатывает норм)
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 11:32
svm
Chocobo писал(а): Отрабатывает норм)
если в названиях есть пробелы,то этот вариант не катит
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 13:05
Chocobo
svm, вот жеж оказия
Надоело воевать с башем, который даже типизацию толком не держит. Забирайте в пять строк на питоне:
Код: Выделить всё
#!/usr/bin/python
import sys
for i in sys.argv[1:]:
with open(".hidden", "a") as hidden:
hidden.write(i+"\n")
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 13:58
svm
Chocobo писал(а): 
Надоело воевать с башем
питон работает ,спасибо
а прокоментировать ,пять строк(хотя бы две 2-3) ???

,для особо одарённых

но я так и не понял

в чём проблема то.в баше или в Caja ?
пробовал и через xclip - тоже не получилось
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 16:18
Chocobo
svm, в баш аргументы прилетают не форматированной строкой
/full/path/to/folder 1 /full/path/to/folder 2
из
$CAJA_SCRIPT_SELECTED_FILE_URIS
или
folder 1 folder 2
из
$CAJA_SCRIPT_SELECTED_FILE_PATHS
И при дайльнейшем разборе на составляющие первым делом баш бъет элементы списка по пробелам, откуда и получается
При вызове же аргументов в python - на входе сразу получим структурированный список и не придется плясать с понимаем нужный тут пробел или же тут будет перевод строки.
На вход скрипта при вызове из контекстоного меню сценариев прилетает такой список -
['/home/chocobo/.config/caja/scripts/hide.py', 'folder 1', 'folder 2']
,соотвественно остается только взять второй и третий элемент и занести их в файл.
Если разбирать совсем уж по строкам:
#!/usr/bin/python
- указание интерпретатора, чтоб при вызове ./hide.py система дернула именно питон.
import sys
- вызов стандартного модуля sys, в данном случае для одной нужной нам функции sys.argv, которая вернет аргументы переданные на запуск, т.е. наши имена директорий или файлов.
for i in sys.argv[1:]:
- цикл прохода по элементам списка аргументов, начиная со второго ([1:]
), т.к. начальный элемент списка (sys.argv[0]) всегда сам исполняемый файл.
with open(".hidden", "a") as hidden:
- в теле цикла просто открываем файл .hidden
в режиме добавления строк (a
, append)
hidden.write(i+"\n")
- и записываем текущий элемент итерации из i
в тот файл
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 17:31
svm

,это что проблема с выводом баш?
svm@svm ~/.config/caja/scripts $ grep -E "[^//]+$" .hidden2
/home/svm/.config/caja/scripts/CD DVD
/home/svm/.config/caja/scripts/system_util
/home/svm/.config/caja/scripts/Анимированные обои
/home/svm/.config/caja/scripts/Move-to..._
/home/svm/.config/caja/scripts/Notepad++
svm@svm ~/.config/caja/scripts $ grep -E "^/.+/" .hidden2
/home/svm/.config/caja/scripts/CD DVD
/home/svm/.config/caja/scripts/system_util
/home/svm/.config/caja/scripts/Анимированные обои
/home/svm/.config/caja/scripts/Move-to..._
/home/svm/.config/caja/scripts/Notepad++
svm@svm ~/.config/caja/scripts $ grep -E "[^//]+$" .hidden2 | echo -e >> .hidden
svm@svm ~/.config/caja/scripts $ grep -E "[^//]+$" .hidden2 >> .hidden
а почему grep не работает ?или так и должно быть или же это косяк ?
т.е. то что нагрепал = выделяет,но в файл отправляет всё
(две последние строки+на скрине видно)
или я как то не правильно составил команду/строку
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 17:57
colonel
Chocobo писал(а):...
for i in $CAJA_SCRIPT_SELECTED_FILE_PATHS; do
..... >> ./.hidden
done;
Chocobo писал(а):... import sys
for i in sys.argv[1:]:
with open(".hidden", "a").......
собсно , то о чём говорилось в #15 :
> как это правильно решить .... ?
> "... составлением списка имён выделенных файлов и поочерёдной вставкой их в .hidden используя цикл.... как вариант, не ?"
Скрытие файлов и директорий
Добавлено: 04 апр 2017, 18:14
Chocobo
colonel, все так. Просто на случай с переборкой башем, мне в голову приходит либо еще один вложенный цикл на сравнение полученного элемента с результатами ls, на полное соответствие, если его нет, то делать конкатенацию со следующим, чтоб перебрать варианты имен с пробелами. Но тут возникнет вхождение на случай если есть Файл
и Файл 1
Либо то же сложение строк применять уже при условии, что греп верунл не единственное вхождение подстроки на значение текущего элемента.
В любом случае надо будет усложнять логику по этой причине.
Скрытие файлов и директорий
Добавлено: 09 апр 2017, 10:34
root
Chocobo, твой скрипт неактуален по 2-м причинам:
1) пробелы в путях
2) в файл .hidden можно передать только %F пути (если быть корректнее, то - в твой скрипт, который сам потом передает в .hidden), которые являются полными; а самому файлу нужны только названия родительских папок. т.е. запись /home/adminka/Загрузки
не будет работать в отличии от записи Загрузки
. Не знаю, где именно ты его тестил, но в cinnamon это так.
Скрытие файлов и директорий
Добавлено: 09 апр 2017, 10:38
Chocobo
adminka, не, если расчитаешь выше - здесь мы обсуждали сценарии в ~/.config/caja/scripts
и оно работает)
Для использования с тем вариантом пункта контекстного меню - можно и пересмотреть, немо я не пользуюсь обычно.
Скрытие файлов и директорий
Добавлено: 09 апр 2017, 10:44
root
Chocobo,
Chocobo писал(а): CAJA_SCRIPT_SELECTED_FILE_PATHS
NEMO_SCRIPT_SELECTED_FILE_PATHS
А это что такое? Где файлы лежат?
/home/adminka/.config/nemo ниже папок нет
Скрытие файлов и директорий
Добавлено: 09 апр 2017, 11:00
Chocobo
adminka, для немо в ~/.local/share/nemo/scripts
Скрытие файлов и директорий
Добавлено: 09 апр 2017, 12:00
Chocobo
adminka, вот набросал для варианта с контекстным меню (nemo actions) и использованием как
Exec=<hide.py %F>
Код: Выделить всё
#!/usr/bin/python
import sys
import os
i=1
while i < len(sys.argv):
try:
while str(sys.argv[i+1])[0] != '/':
sys.argv[i]=sys.argv[i]+ " "+sys.argv.pop(i+1)
if sys.argv[i+1][0] == '/':
i= i+1
i= i+1
except IndexError:
break
for i in sys.argv[1:]:
path = i[:i.rfind('/')+1]
name = i[i.rfind('/')+1:]
with open(path+".hidden", "a") as hidden:
hidden.write(name+"\n")
Скрытие файлов и директорий
Добавлено: 09 апр 2017, 14:23
root
Chocobo, спасибо за скрипт. Заметил, что происходит забавная ситуация: после удаления указанной в .hidden папки, ее название все равно остается в нем. Т.е. при создании новой с тем же названием она будет автоматически скрываться. Небольшой недочет; не скрипта, конечно же, а самого подхода скрытия.

Скрытие файлов и директорий
Добавлено: 09 апр 2017, 19:47
Chocobo
можно и этот момент попробовать засинкать, раз уж скриптуем

. Например рекурсивно прогнать по всем папкам где есть .hidden что-нибудь такое: