Hlavní navigace

Záložky adresářů na příkazové řádce (DirectoryBookmarks)

7. 4. 2024 18:40 (aktualizováno) Pavel Ponec

Přepínáte ve znakovém terminálu často různé adresáře souborového systému? Pak by vám mohla přijít vhod aplikace popsaná v tomto článku. Jak to funguje? V aktuálně navštíveném adresáři lze napsat (v terminálu) příkaz sdf d1 , kde parametr d1  je alfanumerický text reprezentující název záložky. Od toho okamžiku se lze do stejného adresáře vrátit kdykoliv později příkazem cdf d1 . Jednomu adresáři lze přiřadit postupně více záložek. Použité názvy záložek lze recyklovat: při opakovaném uložení stejné záložky se původní záznam v tichosti přepíše. Záložky jsou case-sensitive a ukládají se v textovém formátu CSV (oddělovačem je tabulátor) v domovském adresáři uživatele s názvem .directory-bookmarks.csv, lze je tedy snadno upravit běžným textovým editorem. Typickým důvodem k editaci může být změna adresářové struktury, zmíněný soubor však může být užitečný i při přenosu projektu na jiný počítač. 

Původní implementace vznikla před 30 lety (někdy během roku 1993) – jako skript pro unixový C-shell. Po přechodu na Linux jsem skript mírně upravil pro Bash a v takové podobě jsem ho používal až dosud. Letos jsem se rozhodl nástroj přepsat do Javy kvůli plánované práci ve Windows. Nové řešení jsem pak implementoval do jediného souboru (přesněji řečeno do jedné Java třídy) s názvem DirectoryBookmarks.java tak, aby ji bylo možné pouštět v prostředí Java 17 i bez předchozí kompilace. Třída akceptuje původní datový formát, některé funkce byly doplněny. Výše uvedené zkratky (příkazů aplikace) má smysl začít požívat až po její integraci do prostředí znakového terminálu. Připomeňme:

  • sdf d1 [comment] : název příkazu byl inspirován slovy “Save Directory with a bookmark to the File”. Parametr na pozici d1 je povinný a reprezentuje název záložky aktuálně navštíveného adresáře. Volitelně lze doplnit ještě textový komentář.
  • cdf d1 : název příkazu byl inspirován slovy “Change Directory using a bookmark of the File”  a přepne uživatele do adresáře, který je s uloženou záložkou spárovaný. Volitelně lze název záložky doplnit lomítkem (bez mezery) a názvem některého ze skutečných podadresářů.
    Příklad: cdf d1/mySubdirectory
  • ldf : název příkazu byl inspirován slov “List Directories from the File”, příkaz vypíše seřazený seznam všech záložek a adresářů uložených v CSV souboru – včetně komentářů. 
  • ldf d1 : Pokud předchozí příkaz doplníme názvem záložky, získáme cestu spárovaného adresáře. V Linuxu lze tento výraz využít třeba také pro kopírování souborů. Následující ukázka kopíruje v Linuxu všechny soubory s příponou java z adresáře označeného záložkou d1 do adresáře označeného záložkou d2:
    cp $(ldf d1)/*.java $(ldf d2)  

Poznámka k výkonu: i když přímé použití Java třídy může připomínat interpretování skriptu, na pozadí se provádí vždy kompilace. Na novějších počítačích nastane sotva postřehnutelná prodleva, na starších však může být takové prodlení už rušivé. Pro eliminaci tohoto problému umí třída zkompilovat sama sebe a výsledek sestavit do spustitelného JAR souboru, čímž se doba provedení řádově zkrátí. Start Javy pouze s parametrem modulu jádra nemělo na výsledek měřitelný vliv.

Dále představím popis vybraných příkazů pro znakový terminál. V závislosti na okolnostech může být nezbytné doplnit k souborům cestu. V následujících ukázkách reprezentuje první výraz spustitelný souboru Javy, druhý označuje třídu s implementací a třetí výraz reprezentuje prováděcí příkaz. Příkazy lze uvádět volitelně pomlčkou (jednou i vícemi). Pro každý z uvedených příkazů lze samozřejmě připravit si příkazovou zkratku pomocí skriptu či funkce.

  • java DirectoryBookmarks.java i : (znak prováděcího příkazu je odvozem z anglického Integrate) – vypíše kód potřebný pro inicializaci shellu před první použitím. Na Ubuntu lze generovaný kód pro Bash zapsat na konec souboru  .bashrc . Ve Windows generuje třída funkce pro PowerShell. V adresáři projektu lze najít také šablonu pro integraci s terminálem typu CMD. Pro jistotu připomínám, že výše uvedené zkratky lze používat až po zavedení generovaných funkcí do shellu. Třeba opětovným otevřením znakového terminálu.
  • java DirectoryBookmarks.java b : (Bookmarks) Vypíše všechny záložky přiřazené aktuálnímu adresáři.
  • java DirectoryBookmarks.java r d1 : (Remove) Příkaz odstraní záložku určenou výrazem d1, odkazovaný adresář samozřejmě ponechá beze změny.
  • java DirectoryBookmarks.java f :  (Fix) odstraní všechny záložky, které vedou na neexistující (či neviditelné) adresáře. 
  • java DirectoryBookmarks.java c  : (Compile) kompiluje zdrojový kód aktuální třídy do JAR souboru. Verzi JAR je pak třeba spouště trochu jiným odlišným příkazem, viz dále.
  • java -jar DirectoryBookmarks.jar i : (Integrate) – Pro JAR verzi programu se generuje mírně odlišný kód pro inicializaci.
  • java DirectoryBookmarks.java : spuštění bez “prováděcího příkazu“ vypíše aktuální verzi a výčet dostupných parametrů.

Aplikace byla uvolněná pod licencí Apache License, Version 2.0 a potřebuje pro své spuštění prostředí Java 17 či vyšší. V současně době lze na internetu už najít podobných nástrojů několik, nejvíce tam však postrádám přenositelnost mezi operačními systémy. Tento článek jsem psal v naději, že takové pojetí záložek adresářů bude pro někoho užitečné.

Tělo původního řešení (z roku 1993) bylo uloženo v unixovém skriptu s názvem ldf, dnes se z něj dochovala už jen hlavička s českým popisem. Patinu screenshotu jsem doplnil v editoru GIMP.

Stránka projektu:

Doplněno dne 2023–10–02:
  • Pro Linux je k dispozici instalační skript. Předpokládá instalovanou Javu 17 a nastavení systémové proměnné JAVA_HOME.

Sdílet