Ako na kôš v príkazovom riadku

16.04.2021 | 16:36 | Richard | Richard

Tento krátky blog pojednáva o programe trash-cli, ktorý slúži na prácu s košom v príkazovom riadku emulátora konzoly.

Čo je kôš, to zrejme každý pozná, ak neskočil do súčasného „computingu“ priamo z DOS-u ☺.

Kedysi dávno, okolo roku 2005-6 som používal desktopové prostredie KDE, a vtedy som občasne používal aj funkciu koša, ktorá bola integrovaná aj do súborového správcu Krusader-a. Potom som prešiel na okenné manažéry, a aj viac som používal terminál, a na kôš som aj zabudol… a pravdu povediac, ani mi nejako nechýbal.

Ale prednedávnom som sa dočítal o programe trash-cli, ktorý vracia túto funkcionalitu i do terminálu.

Neviem, ako dlho je tento program na svete, možno že ho väčšina z vás aj používa. Ale možno je pár takých ako ja, ktorí sa o ňom dozvedeli až nedávno či teraz.

Samotný program sa dá stiahnuť z repozitárov či github-u.

 

1 Opis

Program, ako o ňom hovorí autor, ukladá súbory do koša, so zachovaním pôvodného umiestnenia, dátumu zmazania a povolení. Využíva ten istý kôš ako KDE, GNOME či XFCE - predvolene ~.local/share/Trash.

Samotný balík sa skladá z týchto súčastí:

 

2 Použitie

Vytvoríme si testovací adresár, s nápaditým názvom test.
V ňom si vytvoríme niekoľko súborov pomocou:

touch test-{a..g}

A teraz niektoré do koša hodíme:

trash test-a test-b

Ako vidno, namiesto trash-put stačí i trash.

A teraz sa pozrieme, čo máme v koši:

trash-list | grep test

a máme tam:

2021-04-16 16:00:08 /home/richard/test/test-b
2021-04-16 16:00:08 /home/richard/test/test-a

Skúsime obnoviť:

trash-restore

Dostaneme otázku, že ktorý súbor:

  0 2021-04-16 16:00:08 /home/richard/test/test-b
  1 2021-04-16 16:00:08 /home/richard/test/test-a
What file to restore [0..1]: 

A to je myslím všetko podstatné.

Za zmienku už iba stojí, že

trash-empty <days>

Vysype súbory staršie ako <days>, a že

trash-rm <regexp>

definitívne zmaže súbory z koša, ktoré spĺňajú regulárny výraz.

 

3 Implementácia v TUI správcovi súborov

No to je všetko krásne, ale ako vymazať súbory v nejakom textovom správcovi súborov?
No z tých, ktoré poznám, to určite pôjde v CLEX-e, vytvorením skriptu - viac v staršom blogu.

Ale kedže ja používam vysoko-návykový a vysoko-modifikovateľný Sunrise Commader pre GNU Emacs, tam som si to spravil nasledovne (v LISP-e sú poznámky uvádzané pomocou ;;:

(defun sr-marked-trash (&optional arg)                                              ;; definujeme si novú funkciu
  "Send marked files/folders to Trash."                                             ;; dáme jej nejaký opis, pre integrovanie do nápovedy
  (interactive)                                                                     ;; funkcia musí byť volaná z príkaz. riadku alebo skratkou
  (let* ((fn-list (dired-get-marked-files nil arg)))                                ;; zistíme, ktoré súbory sú označené a vytvoríme z nich zoznam
    (setq flist (format "%s" fn-list))                                              ;; ale príkaz shellu nevie pracovať so zoznamom, takže ho
                                                                                    ;;   prevedieme do reťazca
    (shell-command (concat "trash " (dired-replace-in-string "[(|)]" "" flist))))   ;; ale zase v reťazci nám zostanú i ( a ), ktoré uzatvárajú
                                                                                    ;;   zoznam, takže si ich zrušíme nahradením za prázdny reťazec
                                                                                    ;;   a tento reťazec spojíme so slovom "trash" a toto pošleme 
                                                                                    ;;   ako príkaz shellu
  (revert-buffer))                                                                  ;; nakoniec si obnovíme zobrazenie buffera

Nakoniec si k tomu dáme i nejakú klávesovú skratku, aby sme to nemuseli volať cez M-x:

(global-set-key (kbd "<f12> d") 'sr-marked-trash)

V mojom prípade je to F12 a následne d (takže nie naraz, osobne mám rád postupne stláčanie, uvádzam ich za klávesom F12, ktorý je namapovaný namiesto Caps Lock a aj ide vystupuje ako kláves Hyper).

 

4 Epilóg

V známom filme Adéla ještě nevečeřela je známa replika (neviem, či je to takto doslova): „Jak primitivní. Ale ako účinné.“ v scéne, kde dôjde k zostreleniu balóna nožíkom, namiesto sofistikovanej svetelnej zbrane.
A toto platí i pre trash-cli.
A pre GNU/Linux vo všeobecnosti - drobné programy, ktorých kombináciou sa dejú kúzla.
Aha - a keby mal niekto námietku, že načo toto všetko, načo používať a ohýbať napr. ten Emacs, tak len jeden tip: maximálna kontrola stojí trochu úsilia, obetovanie krátkodobého pohodlia; to je jediná cena.
A dosť, než skĺznem(e) do filozofických úvah ☺.

    • RE: Ako na kôš v príkazovom riadku 17.04.2021 | 15:41
      Avatar bedňa LegacyIce-antiX  Administrátor

      Používanie koša je neužitočné až do momentu, keď si zmažeš niečo čo nejakú úžitkovú hodnotu má :)

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
      • RE: Ako na kôš v príkazovom riadku 18.04.2021 | 11:54
        Avatar redhawk75   Používateľ

        napriklad clanok do prace o velkosti 14  A4 :D odvtedy robim vzdy aj zalohu.

        k tomu kosu, pouzivam skript na cistenie disku (hlavne thumbnails) ale mazaniu kosa sa vyhybam, ten mazem rucne 

    • RE: Ako na kôš v príkazovom riadku 18.04.2021 | 12:03
      Avatar redhawk75   Používateľ

      na vyprazdnenie staci aj

      rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
      rm -rf /root/.local/share/Trash/*/** &> /dev/null

      pouzivam moj script este pre Ubu 10. Teraz uz nepouzivam automazanie kosa

      #!/bin/bash
       
      # cistenie starych verzii kernelu
      # OLDCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')
      # CURKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')
      # LINUXPKG="linux-(image|headers|ubuntu-modules|restricted-modules)"
      METALINUXPKG="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"
      # OLDKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $LINUXPKG |grep -vE $METALINUXPKG|grep -v $CURKERNEL)
      # YELLOW="\033[1;33m"
      # RED="\033[0;31m"
      # ENDCOLOR="\033[0m"
       
      if [ $USER != root ]; then
        echo -e $RED"Error: must be root"
        echo -e $YELLOW"Exiting..."$ENDCOLOR
        exit 0
      fi
       
      # cistenie apt
      echo -e $YELLOW"Cleaning apt cache..."$ENDCOLOR
      apt update
      apt autoremove
      apt autoclean
      apt clean
      
      echo -e $YELLOW"Cleaning thumb cache..."$ENDCOLOR
      rm -rf ~/.cache/thumbnails/*
       
      # automaticke zmazanie kos
      # echo -e $YELLOW"Emptying every trashes..."$ENDCOLOR
      # rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
      # rm -rf /root/.local/share/Trash/*/** &> /dev/null
      
      # ak je ssd pouzije sa trim
      echo -e $RED"Trimming..."$ENDCOLOR
      fstrim / -v
       
      echo -e $YELLOW"Script Finished!"$ENDCOLOR
      • RE: Ako na kôš v príkazovom riadku 18.04.2021 | 21:31
        Avatar bedňa LegacyIce-antiX  Administrátor

        Ja automaticky nemažem vôbec nič, už sa mi to pár krát vyplatilo, napr. keď sa zaplnil disk a bol problém nabútovať, potom stačilo vymazať cache.

        Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
        • RE: Ako na kôš v príkazovom riadku 18.04.2021 | 23:19
          Avatar redhawk75   Používateľ

          tak minimalne na chromebooku musim, ma to 16GB eMMC MX mal 8GB, gallium ma 7,8GB + nejaka hudba, a sem tam nejaka hra (Tiberian Sun, openra Dune 2000, openra RedAlert) + nejake veci k robote a sup to na 14GB