Como desativo periodicamente a exibição de arquivos ocultos?

10

Então, para esconder alguns arquivos e pastas para olhos não qualificados, modifiquei seus nomes colocando um ponto no início do nome. Funciona e os arquivos estão ocultos. Pessoas intrometidas que não são habilidosas não as verão. E usando o Nautilus, ative e desative "mostrar arquivos ocultos" usando a combinação de teclas Ctrl- H. Bem. Mas nunca sei se deixo o recurso ativado ou desativado.

Eu gostaria de escrever um script bash que inicie automaticamente a cada 10 minutos, por exemplo, e desative o recurso "mostrar arquivos ocultos". Então, eu teria certeza de que olhos curiosos nunca verão arquivos ocultos. Agora o problema é que:

  • Não sei qual instrução bash usar, se houver. Tenho certeza de que os scripts do bash podem fazer quase tudo, então, por favor ajude!
  • Não sei como iniciar automaticamente o script bash a cada xx segundos ou minutos.

Como eu faço isso?

Salrandazzo
fonte
Olá Sarandazzo, se uma das respostas resolveu seu problema (acho que existem várias respostas que funcionam), você seria gentil em aceitar a resposta (marque o grande "V" abaixo das setas para cima / para baixo à esquerda). É a maneira apropriada de indicar a resposta que funcionou para você.
Jacob Vlijm 22/03

Respostas:

10

Você pode usar gsettingspara acessar dconffacilmente a configuração responsável no registro na linha de comando.

A configuração para mostrar arquivos ocultos (com nomes começando com .) está localizada no esquema org.gtk.Settings.FileChoosere é chamada show-hidden.

Os valores permitidos são true(mostrar arquivos ocultos) ou false(não mostrá-los).

Então, aqui estão os comandos para ativar ou desativar a exibição dos arquivos ocultos:

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

Para executar automaticamente este comando a cada x minutos, existem dois bons recursos para aprender como conseguir isso:

  • Usando cron(a resolução mínima é de 1 minuto): help.ubuntu.com: Cron How-to

    Observe que cronexecuta tarefas com um conjunto muito limitado de envvariáveis ​​que não incluem DBUS_SESSION_BUS_ADDRESS, mas isso é necessário para o gsettingstrabalho. Portanto, temos que cuidar de definir essa variável no script que executamos, se precisarmos

    Eu preparei um script para você (com a ajuda de @JacobVlijm que me ligado esta resposta sobre estouro de pilha por @Radu Rădeanu ) que cuida desse problema e pode ser executado diretamente pelo 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
    
  • Sem usar cron: Como executar o comando a cada 10 segundos (sem cron)?

Byte Commander
fonte
Ha, você me venceu 9 segundos :)
Jacob Vlijm
Olá, Byte, quando executado a partir do cron, você precisa definir a DBUS_SESSION_BUS_ADDRESSvariável de ambiente para que a edição de gsettings funcione.
Jacob Vlijm
@JacobVlijm Obrigado, mas não tenho experiência em cron. Foi por isso que acabei de vincular o site de instruções. Você se importaria de me ajudar?
Byte Commander
Absolutamente, ao executar comandos a partir do cron, o conjunto de ambientes é (muito) limitado, como eu encontrei tentando executar comandos a partir do cron. Bom post é este: stackoverflow.com/a/19666729/1391444 Linhas de Radu, eu sempre uso em scripts ao editar gsettings do cron.
27430 Jacob Vlijm em 09/03
@JacobVlijm Incluiu a parte env. está correto?
Byte Commander
5

Terei que verificar outras versões, mas nas versões 14.04 e 15.10, o gsettingscomando para verificar a visibilidade dos arquivos ocultos é:

gsettings get org.gtk.Settings.FileChooser show-hidden
  • Para definir o valor como false(não mostrar arquivos ocultos):

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

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

1. Um script para (re) definir o valor é:

#!/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"])

Para executá-lo:

  • copie o script em um arquivo vazio, salve-o como reset_hidden.py
  • execute-o pelo comando:

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

    onde o intervalo de tempo é em segundos, por exemplo

    python3 /path/to/reset_hidden.py 600

Adicione-o aos aplicativos de inicialização

Para adicioná-lo aos Aplicativos de Inicialização: Dash> Startup Applications> Add. Adicione o comando:

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

2. Execute o comando do cron

Se você preferir executar o comando do cron em vez de um script em segundo plano, uma variável de ambiente importante não será configurada:

DBUS_SESSION_BUS_ADDRESS

editar / definir gsettings do cron só funciona se você definir a variável pela primeira vez .

Se você deseja executá-lo a partir do cron, faça com que o cron execute o script abaixo:

#!/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. Mais elegantemente, usando o tempo ocioso

Se você estiver trabalhando no seu computador, provavelmente não gostaria que os arquivos ocultassem inesperadamente enquanto trabalhava.

Usando o script abaixo, os arquivos serão ocultados após um tempo ocioso arbitrário. A configuração é exatamente igual, [1]mas o <interval>tempo agora é <idle_time>(em segundos) antes dos arquivos serem ocultados (novamente).

O script precisa xprintidle:

sudo apt-get install xprintidle

O script

#!/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
Jacob Vlijm
fonte
1
Posso confirmar que seu esquema / chave gsettings está correto em 15.10. E +1 :)
Byte Commander
0
  1. Use gconftool-2for nautilus-file-management-propertiesmanpage: http://manpages.ubuntu.com/manpages/hardy/man1/gconftool-2.1.html
  2. Use crontab -epara sua agenda. página de manual: https://help.ubuntu.com/community/CronHowto
Ivan Temchenko
fonte
1
Não sei dizer exatamente desde quando, mas gconfestá obsoleta e não é mais usada pelo menos pelo Nautilus. No meu sistema 15.10, sua configuração não está mais disponível. Além disso, você deve descrever as etapas mais claramente, em vez de apenas dar dicas.
Byte Commander