Как мне периодически отключать показ скрытых файлов?

10

Итак, чтобы скрыть некоторые файлы и папки для неопытных глаз, я изменил их имена, поставив точку в начале имени. Это работает, а файлы скрыты. Любопытные люди, которые неопытны, не увидят их. А с помощью Nautilus я включаю и выключаю «показывать скрытые файлы» с помощью комбинации клавиш Ctrl- H. Хорошо. Но тогда я никогда не узнаю, включаю ли я эту функцию

Я хотел бы написать скрипт bash, который автоматически запускается каждые, скажем, через 10 минут, и отключает функцию «показывать скрытые файлы». Так что я был бы уверен, что любопытные глаза никогда не увидят скрытые файлы. Теперь проблема в том, что:

  • Я не знаю, какую инструкцию bash использовать, если она есть. Я уверен, что bash-скрипты могут делать практически все, поэтому, пожалуйста, помогите!
  • Я не знаю, как автоматически запускать скрипт bash каждые XX секунд или минут.

Как это сделать?

Salrandazzo
источник
Привет, Сарандаццо, если любой из ответов решил твою проблему (я думаю, что несколько ответов сработали), будь так любезен, прими ответ ( отметь большую букву «V» под стрелками вверх / вниз слева). Это подходящий способ указать, что ответ сработал для вас.
Джейкоб Влейм

Ответы:

10

Вы можете использовать gsettingsдля доступа к ответственному параметру в dconfреестре легко из командной строки.

Параметр отображения скрытых файлов (имена которых начинаются с .) находится в схеме org.gtk.Settings.FileChooserи вызывается show-hidden.

Допустимые значения: либо true(показать скрытые файлы), либо false(не показывать их).

Итак, вот команды для включения или отключения отображения скрытых файлов:

gsettings set org.gtk.Settings.FileChooser show-hidden true
gsettings set org.gtk.Settings.FileChooser show-hidden false

Чтобы автоматически запускать эту команду каждые x минут, есть два полезных ресурса, чтобы узнать, как этого добиться:

  • Использование cron(минимальное разрешение - 1 минута): help.ubuntu.com: Cron How-to

    Обратите внимание, что cronзапускаются задачи с очень ограниченным набором envпеременных, которые не включают DBUS_SESSION_BUS_ADDRESS, но это необходимо для gsettingsработы. Поэтому мы должны сами позаботиться об установке этой переменной в скрипте, который мы запускаем, если нам это нужно

    Я подготовил сценарий для вас (с помощью @JacobVlijm который связал меня этот ответ на переполнение стека по @Radu Rădeanu ) , который заботится об этой проблеме и может быть запущена непосредственно cron:

    #!/bin/bash
    
    # --> Script to disable showing hidden files - to be run as cron job <--
    
    # export DBUS_SESSION_BUS_ADDRESS environment variable
    PID=$(pgrep gnome-session)
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
    
    gsettings set org.gtk.Settings.FileChooser show-hidden false
  • Без использования cron: Как выполнять команду каждые 10 секунд (без cron)?

Byte Commander
источник
Ха, ты побил меня 9 секунд :)
Джейкоб Влейм
Привет, байт, при запуске из cron вам нужно установить DBUS_SESSION_BUS_ADDRESSпеременную окружения, чтобы заставить редактирование работать.
Джейкоб Влейм
@JacobVlijm Спасибо, но я совсем не опытен в cron. Вот почему я только что связал сайт с практическими рекомендациями. Вы не могли бы помочь мне?
Byte Commander
Безусловно, при запуске команд из cron набор env vars (очень) ограничен, как я однажды обнаружил, пытаясь запускать команды из cron. Вот хороший пост: stackoverflow.com/a/19666729/1391444 Строки Radu, которые я всегда использую в скриптах при редактировании gsettings из cron.
Джейкоб Влейм
@JacobVlijm Включил часть env. это правильно?
Byte Commander
5

Я должен буду проверить другие выпуски, но 14.04 и 15.10 gsettingsкоманда для проверки видимости скрытых файлов:

gsettings get org.gtk.Settings.FileChooser show-hidden
  • Чтобы установить значение false(не показывать скрытые файлы):

    gsettings set org.gtk.Settings.FileChooser show-hidden false
  • или true:

    gsettings set org.gtk.Settings.FileChooser show-hidden true

1. Сценарий для (пере) установки значения затем:

#!/usr/bin/env python3
import subprocess
import sys
import time

interval = int(sys.argv[1])

key = "org.gtk.Settings.FileChooser"
val = "show-hidden"

while True:
    time.sleep(interval)
    subprocess.Popen(["gsettings", "set", key, val, "false"])

Чтобы запустить это:

  • скопируйте скрипт в пустой файл, сохраните его как reset_hidden.py
  • запустите его командой:

    python3 /path/to/reset_hidden.py <interval>

    где временной интервал в секундах, например

    python3 /path/to/reset_hidden.py 600

Добавьте его в автозагрузку приложений

Чтобы добавить его в Startup Applications: Dash> Startup Applications> Add. Добавьте команду:

python3 /path/to/reset_hidden.py <interval>

2. Запустите команду из cron

Если вы предпочитаете запускать команду из cron вместо фонового скрипта, важная переменная среды не устанавливается:

DBUS_SESSION_BUS_ADDRESS

Редактирование / установка настроек из cron работает только при первой установке переменной .

Если вы хотите запустить его из cron, сделайте так, чтобы cron запустил следующий скрипт:

#!/bin/bash

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)

gsettings set org.gtk.Settings.FileChooser show-hidden false

3. Более элегантно, используя простой

Если вы работаете на своем компьютере, вам, вероятно, не хотелось бы, чтобы файлы неожиданно скрывались во время работы.

Используя приведенный ниже скрипт, файлы будут скрыты после произвольного простоя. Настройка точно такая же, [1]но <interval>время теперь <idle_time>(в секундах), прежде чем файлы должны скрыться (снова).

Скрипт нуждается в xprintidle:

sudo apt-get install xprintidle

Сценарий

#!/usr/bin/env python3
import subprocess
import sys
import time

interval = int(sys.argv[1])

key = "org.gtk.Settings.FileChooser"
val = "show-hidden"

idle1 = 0

while True:
    time.sleep(2)
    idle2 = int(subprocess.check_output(["xprintidle"]).decode("utf-8").strip())/1000
    if all([idle1 <= interval, idle2 >= interval]):
        subprocess.Popen(["gsettings", "set", key, val, "false"])
    idle1 = idle2
Якоб Влейм
источник
1
Я могу подтвердить, что ваша схема / ключ gsettings верна 15.10. И +1 :)
Byte Commander
0
  1. Используйте gconftool-2для nautilus-file-management-propertiesmanpage: http://manpages.ubuntu.com/manpages/hardy/man1/gconftool-2.1.html
  2. Используйте crontab -eдля вашего графика. man-страница: https://help.ubuntu.com/community/CronHowto
Иван Темченко
источник
1
Я не могу сказать вам точно с каких пор, но gconfустарела и больше не используется по крайней мере Наутилусом. В моей системе 15.10 ваши настройки больше не доступны. Также вы должны описать шаги более четко, а не просто давать подсказки.
Byte Commander