Třídění souborů podle přípon v Bashi


A je to tu! Návod, který se už delší dobu chystám napsat. Chtěla jsem vám, čtenářům mého blogu, trochu přiblížit Bash, pravděpodobně nejpoužívanější unixový shell (můžete ho znát také pod označením terminál, konzole, příkazový řádek, CLI – tyto názvy mají lehce odlišné významy, v tomto návodu budu pro zjednodušení psát Bash nebo terminál). Příklad je určen pro Bash v systému Linux, ale teoreticky by měl fungovat v Bashi i kdekoliv jinde. 😉

Pro koho to je?

  • Pro ty, kteří se chtějí naučit s Bashem.
  • Pro ty, které zajímá, k čemu je vlastně ten Linuxový terminál užitečný.
  • Pro ty, kteří jen hledají skriptík na třídění souborů a teorie je moc nezajímá.

Varování

Skript v tomto článku mění (přesouvá) soubory v počítači. Skript by neměl nic mazat, nesprávným použitím si pravděpodobně uděláte „jen“ nepořádek v počítači, v krajním případě by ale, čistě teoreticky, mohl něco smazat či jinak „rozbít“. Skript prosím nejprve použijte v testovací složce, kde není nic důležitého, co by se vám mohlo ztratit, než si budete jistí, že dělá přesně to, co chcete. Pokud najdete nějakou chybu ve skriptu nebo v článku, můžete mi napsat. Stále se učím a rozhodně neovládám Bash dokonale. 😉

Skript jsem několikrát testovala, dokonce na dvou různých systémech a měl by fungovat, ale teoreticky se může stát, že se někde bude chovat nepředvídatelně. Obecně bych nedoporučovala bezhlavě spouštět skripty, které najdete různě na internetu, terminál je velmi mocný nástroj a i pomocí velmi malého skriptu se dá leccos pokazit. Raději si nejprve skripty spusťte v bezpečném prostředí, například na virtuálním počítači.

„Rychlé vítězství“

Na začátek návodu bych se chtěla podělit o skript, který budeme dále rozebírat, zkoumat a vylepšovat. Je zde především pro ty, kteří chtějí skript a nechtějí se toho moc učit, ale také jako ukázka toho, co budeme probírat, čemu možná zatím nerozumíte, ale na konci návodu (doufám) rozumět budete. Tady je:

for soubor in *.*; do if [ -f "$soubor" ] && [ "$soubor" != *. ]; then mkdir -p "${soubor##*.}" && mv "$soubor" $_ && echo "$soubor"; fi; done;

Tento skript vezme všechny soubory v aktuální složce, které v názvu mají tečku, přičemž ignoruje soubory, jejichž název začíná či končí tečkou. Každý z těchto souborů přesune do složky se stejným názvem jako je přípona souboru (část jména souboru za poslední tečkou). Pokud taková složka neexistuje, skript ji před přesunutím souboru vytvoří.

Je to jednořádkový skript, který lze přímo v terminálu spustit a samozřejmě také uložit a používat jako klasický Bash skript (později si ukážeme, co to je a jak na to).

Potřebné znalosti

Podobně jako v případě návodu na program HotkeyP se budu snažit, aby návod pochopili (nebo alespoň uměli použít) i začátečníci, každopádně je určitě dobré znát základy práce s počítačem, vědět co jsou soubory, složky apod. Tento návod je zaměřen na pokročilejší uživatele, než zmíněný návod na HotkeyP, výhodou je předchozí zkušenost s programováním nebo alespoň ponětí o algoritmizaci a také předchozí zkušenost s používáním CLI. Ale není to nutnost, jen bez toho možná nepochopíte všechny souvislosti.

Proč?

Dlouho jsem přemýšlela o nějakém užitečném a přitom jednoduchém příkladu, na kterém bych mohla prakticky předvést, co Bash umí a vysvětlit základy. A tak jednoho dne vznikl nápad na skript pro třídění souborů podle přípon do podadresářů. Dnes dopoledne jsem napsala jeho první, jednořádkovou verzi, o kterou jsem se s vámi podělila výše.

K čemu je dobré třídění souborů do podsložek podle přípony? Mě se to třeba hodí v situaci, kdy mám ve složce se staženými soubory stovky souborů, které jsem stáhla z různých internetových stránek a jednoho krásného dne se rozhodnu, že je chci roztřídit. Často spolu soubory stejného typu souvisí, tak začnu tím, že si je rozdělím podle typu. Mohla bych si je seřadit podle přípony a ručně rozdělit do složek, ale právě tenhle skript to udělá za mě a usnadní mi tak další práci – je pak pro mě jednodušší postupně roztřídit nejdřív obrázky, pak třeba PDF soubory, tabulky, dokumenty a další, když už je mám „předtříděné“ podle typu, než vzít celou tu haldu souborů a jeden po druhém je ručně třídit. Také to pak vypadá jako že toho není tolik. 😉

Proč vlastně Bash? Jelikož mě zaujal tím, kolik toho umí, že v něm můžu relativně jednoduše udělat přesně to, co chci, zároveň je celkem rozšířený – přinejmenším je v téměř každé linuxové distribuci, a tam, kde není, tam se dá většinou doinstalovat. Zároveň se dá použít i na jiných operačních systémech, než Linux – pojďme si to ukázat.

Zprovoznění Bashe na různých systémech

Na různých systémech se Bash spouští různě, dokonce i v jednotlivých Linuxových distribucích se to může mírně lišit. Mám zkušenosti se systémy Linux a Windows, tam existují následující způsoby. Pokud už máte funkční Linuxový terminál, můžete tuto sekci přeskočit.

On-line

Během psaní tohoto článku jsem objevila web Online Linux Terminal. Otestovala jsem v něm skript z tohoto článku a bez problému fungoval! 😀 Pokud tedy chcete jen vyzkoušet skriptování v Bashi, případně se zatím jen učit bez reálného použití skriptu ve vašem počítači, vyzkoušejte přejít na tuto stránku a tam kliknout na tlačítko Run Terminal Now. Pokud se vám linuxový terminál načte, můžete další návody na zprovoznění Linuxového terminálu zatím přeskočit a vrátit se k nim později (on-line linuxový terminál je pochopitelně oproti tomu lokálnímu omezený). Zde je příklad použití tohoto skriptu právě z on-line linuxového terminálu:

Linux

V Linuxu je situace asi nejjednodušší. Záleží na tom, jestli máte Linuxovou distribuci s textovým (hlavně serverové nebo velmi odlehčené distribuce) nebo grafickým (především distribuce určené pro stolní počítače) uživatelským rozhraním.

Distribuce s textovým uživatelským rozhraním

Pokud máte distribuci, která je založená na textovém režimu (CLI), nic dělat nemusíte, pravděpodobně už jste v Bashi. Můžete si pomocí příkazu echo $0 zkontrolovat, zda váš shell je Bash – příkaz by měl vypsat něco jako „bash“ nebo „/bin/bash“ apod. To ostatně můžete udělat pravděpodobně v každé distribuci, když jste v terminálu.

Distribuce s grafickým uživatelským rozhraním

Pokud máte distribuci založenou na grafickém rozhraní (GUI), snad v každé takové distribuci je nainstalovaná aplikace terminálu, která umožňuje používat terminál v okně. V každé distribuci se spouští trochu jinak. Zkuste terminál vyhledat mezi aplikacemi v menu, případně můžete zkusit klávesovou zkratku CTRL + ALT + T, která by měla fungovat hlavně na distribuci Ubuntu. Další možností je vyvolat dialog pro spouštění aplikací klávesovou zkratkou ALT + F2, kam zapište jeden z následujících příkazů: gnome-terminal, konsole, xfce4-terminal nebo mate-terminal (vyzkoušejte všechny, dokud některý nezafunguje).

Pokud se vám stále nepodařilo terminál spustit, můžete vyzkoušet virtuální terminálEN, na který se přepnete klávesovou zkratkou CTRL + ALT + F1 (místo F1 můžete vyzkoušet i F2F6). To by mělo fungovat snad už v každém Linuxu, jen se musíte ve virtuálním terminálu znovu přihlásit vaším jménem a heslem. Zpátky na grafické rozhraní se přepnete klávesovou zkratkou CTRL + ALT + F7.

Windows

Ve Windows je několik možností, jak Bash spustit. Jelikož jde o unixový shell a systém Windows není založen na Unixu, je potřeba využít některé z možností emulace Bashe. Největším problémem při zprovoznění virtualizace bývá především to, že programy pro virtualizaci občas vyžadují aktivování virtualizace v BIOSu počítače, případně aktivaci Hyper-V ve WindowsEN. Postup nastavení v BIOSU se u různých procesorů a základních desek liší, proto v takovém případě zkuste vyhledat příslušný návod k vašemu modelu. Případně je možné vyzkoušet jinou metodu emulace Bashe.

Virtuální počítač

Tato varianta je možná nejbezpečnější jak z toho hlediska, že funguje pravděpodobně na největším počtu operačních systémů (lze ji použít i mimo Windows), tak z hlediska bezpečnosti. Je to v podstatě spuštění virtuálního počítače s vlastním operačním systémem (např. právě Linuxem) uvnitř systému vašeho počítače (např. Windows). Já pro virtualizaci počítače používám program VM VirtualBox, vlastně jsem nikdy žádný jiný nepoužívala, VirtualBox je zdarma a plně mi vyhovuje.

Do VirtualBoxu je potřeba nainstalovat operační systém, pokud jste zvyklí pracovat na Windows, možná by vám mohl vyhovovat Linux Mint nebo Kubuntu. Mě se zatím nejvíce libí Ubuntu MATE. Postup, jak nainstalovat VirtualBox a do něj Linux, si vyhledejte na internetu (rychlejší varianta) nebo mi napište, ať na to vytvořím návod (pomalejší varianta). 😉 Zde se tím nebudeme detailněji zabývat.

Windows Subsystem pro Linux

Tato možnost funguje jen v systému Windows 10. Ten totiž umožňuje nainstalovat si Windows Subsystem pro LinuxEN a vybranou linuxovou distribuci. Opět se zde nebudu zabývat podrobně návodem na instalaci, ta by se dala popsat do dalšího menšího článku a opět platí to, co jsem napsala o postupu na instalaci VirtualBoxu. Navíc si ji už nepamatuji podrobně, musela bych to znovu vyzkoušet. Jen bych chtěla říct, že je potřeba nainstalovat jak Linuxový subsystém tak konkrétní linuxovou distribuci (např. Ubuntu). Po úvodním nastavení se dá terminál spustit pomocí podržení klávesy SHIFT a kliknutí pravým tlačítkem myši na prázdné místo ve složce nebo na ploše, v menu pak vybereme volbu Open Linux shell here.

Docker

Docker podle mého názoru není tak jednoduchá varianta, na práci s ním by se dalo napsat hned několik článků (opět ohledně návodů na instalaci a používání platí to, co v předchozích dvou případech 😉 ). Je potřeba docker stáhnout, nainstalovat a zprovoznit, případně přepnout na Linuxový typ kontejnerů a nějaký kontejner s Linuxem tam stáhnout a spustit tak, abyste se v Příkazovém řádku nebo PowerShellu přepnuli rovnou dovnitř do Linuxového terminálu. Není to jednoduché, ale když víte jak, je to poměrně rychlá varianta.

Git pro Windows

Na tuhle variantu jsem přišla nedávno a je poměrně jednoduchá. Pokud programujete ve Windows, možná máte nainstalovaný Git pro WindowsEN. Pokud ne, můžete si ho nainstalovat i tehdy, když nepotřebujete používat přímo Git. Tento program totiž obsahuje Git Bash, který funguje podobně jako klasický Bash, je sice osekaný, takže to není plnohodnotná varianta Bashe jako u předchozích možností, ale třeba skript z tohoto návodu jsem v něm spustila. 🙂

Mac OS X

S tímto systémem zkušenosti nemám, ale jelikož vychází z Unixu, podobně jako Linux, tak zde bude také podobný terminál. Nevím, zda je tu také Bash, ale věřím, že by se měl dát doinstalovat, pokud by tam nebyl.

Práce s terminálem

Pokud jste s terminálem nikdy nepracovali, doporučuji si projít nějaký návod pro první kroky v terminálu. Já vám chci ukázat náš první příkaz, který si v terminálu vyzkoušíme. Můžete si ho vyzkoušet nezávisle na tom, jestli jste s terminálem seznamovali nebo ne – je totiž velmi jednoduchý.

Příkaz echo

Napište do terminálu následující text:

echo Ahoj světe!

Poté stiskněte Enter a sledujte, co vám terminál vypíše. Měl by vypsat přesně to, co jste napsali za echo, tedy Ahoj světe!

Možná se vám tento příkaz může zdát neužitečný, ale později se nám bude velmi hodit při vypisování obsahu proměnných a různých textů z Bashových skriptů. Například ve skriptu z tohoto návodu je použit pro výpis seznamu přesouvaných souborů. 😉

Pokračování příště

Dnes jsme si představili náš skript, se kterým budeme dále pracovat, zprovoznili si terminál a vyzkoušeli si první příkaz. Chápu, že pro někoho to možná první příkaz nebyl a většina článku byla neužitečná, věřím ale, že někomu zas naopak pomohl. Chtěla jsem vás především seznámit s tím, co je terminál a jak ho zprovoznit, příště se podíváme o něco blíže na práci s terminálem, vyzkoušíme některé základní příkazy a začneme náš skript postupně rozebírat a poznávat jeho jednotlivé části.