Jak okresowo wyłączać wyświetlanie ukrytych plików?

10

Aby ukryć niektóre pliki i foldery przed niewykwalifikowanymi oczami, zmodyfikowałem ich nazwy, umieszczając kropkę na początku nazwy. Działa, a pliki są ukryte. Wścibscy ludzie, którzy nie są wykwalifikowani, ich nie zobaczą. Za pomocą Nautilusa włączam i wyłączam „pokazywanie ukrytych plików” za pomocą kombinacji klawiszy Ctrl- H. W porządku. Ale nigdy nie wiem, czy pozostawię tę funkcję włączoną, czy wyłączoną.

Chciałbym napisać skrypt bash, który automatycznie uruchamia się co, powiedzmy, co 10 minut i wyłącza funkcję „pokaż ukryte pliki”. Byłbym więc pewien, że wścibskie oczy nigdy nie zobaczą ukrytych plików. Problem polega na tym, że:

  • Nie wiem, jakiej instrukcji bash użyć, jeśli w ogóle. Jestem pewien, że skrypty bash mogą zrobić prawie wszystko, więc pomóżcie!
  • Nie wiem, jak automatycznie uruchamiać skrypt bash co xx sekund lub minut.

Jak mam to zrobić?

Salrandazzo
źródło
Cześć Sarandazzo, jeśli którakolwiek z odpowiedzi rozwiązała twój problem (myślę, że istnieje wiele odpowiedzi, które działają), czy byłbyś uprzejmy przyjąć odpowiedź (zaznacz duże „V” poniżej strzałek w górę / w dół po lewej). Jest to odpowiedni sposób wskazania odpowiedzi, która działała dla Ciebie.
Jacob Vlijm

Odpowiedzi:

10

Możesz użyć, gsettingsaby uzyskać łatwy dostęp do odpowiedzialnego ustawienia w dconfrejestrze z wiersza poleceń.

Ustawienie wyświetlania ukrytych plików (o nazwach rozpoczynających się od .) znajduje się w schemacie org.gtk.Settings.FileChooseri jest wywoływane show-hidden.

Dozwolone wartości to true(pokaż ukryte pliki) lub false(nie pokazuj ich).

Oto więc polecenia, aby włączyć lub wyłączyć wyświetlanie ukrytych plików:

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

Aby automatycznie uruchamiać to polecenie co x minut, istnieją dwa dobre zasoby do nauczenia się, jak to osiągnąć:

  • Korzystanie cron(minimalna rozdzielczość to 1 minuta): help.ubuntu.com: Cron How-to

    Zauważ, że cronuruchamia zadania z bardzo ograniczonym zestawem envzmiennych, które nie obejmują DBUS_SESSION_BUS_ADDRESS, ale są potrzebne gsettingsdo działania. Musimy więc sami zadbać o ustawienie tej zmiennej w uruchamianym skrypcie, jeśli jest to potrzebne

    Przygotowałem dla ciebie skrypt (z pomocą @JacobVlijm, który połączył mnie z tą odpowiedzią na Stack Overflow autorstwa @Radu Rădeanu ), który rozwiązuje ten problem i może być uruchamiany bezpośrednio przez 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
  • Bez użycia cron: Jak wykonać polecenie co 10 sekund (bez crona)?

Bajt Dowódca
źródło
Ha, pobiłeś mnie 9 sekund :)
Jacob Vlijm
Cześć Bajt, po uruchomieniu z crona musisz ustawić DBUS_SESSION_BUS_ADDRESSzmienną środowiskową, aby edytowanie ustawień gset działało.
Jacob Vlijm
@JacobVlijm Dzięki, ale w ogóle nie mam doświadczenia w cron. Właśnie dlatego po prostu połączyłem witrynę z instrukcjami. Czy mógłbyś mi pomóc?
Bajt Dowódca
Oczywiście, podczas uruchamiania poleceń z crona zestaw env vars jest (bardzo) ograniczony, ponieważ kiedyś próbowałem uruchomić polecenia z crona. Miły post to ten: stackoverflow.com/a/19666729/1391444 Linie Radu, zawsze używam w skryptach podczas edytowania ustawień z crona.
Jacob Vlijm
@JacobVlijm Uwzględniono część env. czy to jest poprawne?
Bajt Commander
5

Będę musiał sprawdzić inne wydania, ale w dniach 14.04 i 15.10 gsettingspolecenie sprawdzania widoczności ukrytych plików to:

gsettings get org.gtk.Settings.FileChooser show-hidden
  • Aby ustawić wartość na false(nie pokazuj ukrytych plików):

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

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

1. Skrypt do (ponownego) ustawienia wartości to:

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

Aby uruchomić:

  • skopiuj skrypt do pustego pliku, zapisz go jako reset_hidden.py
  • uruchom go za pomocą polecenia:

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

    gdzie odstęp czasu jest w sekundach, np

    python3 /path/to/reset_hidden.py 600

Dodaj go do aplikacji startowych

Aby dodać go do aplikacji startowych: Dash> Aplikacje startowe> Dodaj. Dodaj polecenie:

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

2. Uruchom polecenie z crona

Jeśli wolisz uruchamiać polecenie z crona zamiast skryptu w tle, ważna zmienna środowiskowa nie jest ustawiona:

DBUS_SESSION_BUS_ADDRESS

edycja / ustawianie ustawień z crona działa tylko wtedy, gdy najpierw ustawisz zmienną .

Jeśli chcesz uruchomić go z crona, spraw, aby cron uruchomił poniższy skrypt:

#!/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. Bardziej elegancko, wykorzystując czas bezczynności

Jeśli pracujesz na komputerze, prawdopodobnie nie chciałbyś, aby pliki nieoczekiwanie się ukrywały podczas pracy.

Korzystając z poniższego skryptu, pliki zostaną ukryte po dowolnym czasie bezczynności. Konfiguracja jest dokładnie taka [1]sama, ale <interval>teraz jest czas <idle_time>(w sekundach), zanim pliki powinny się ukryć (ponownie).

Skrypt potrzebuje xprintidle:

sudo apt-get install xprintidle

Scenariusz

#!/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
źródło
1
Mogę potwierdzić, że twój schemat / klucz ustawień jest prawidłowy 15.10. I +1 :)
Bajt Dowódca
0
  1. Użyj gconftool-2dla nautilus-file-management-propertiesstrony man: http://manpages.ubuntu.com/manpages/hardy/man1/gconftool-2.1.html
  2. Użyj crontab -edo swojego harmonogramu. strona: https://help.ubuntu.com/community/CronHowto
Ivan Temchenko
źródło
1
Nie potrafię powiedzieć dokładnie od kiedy, ale gconfjest przestarzały i nie jest już używany przez przynajmniej Nautilusa. W moim systemie 15.10 twoje ustawienie nie jest już dostępne. Powinieneś także opisać kroki jaśniej, zamiast tylko dawać wskazówki.
Bajt Dowódca