Příkazy rm
a rmdir
slouží k odstraňování souborů a složek v operačních systémech Linux, macOS a dalších systémech unixového typu. Jsou obdobou příkazů del
a deltree
známých z Windows a DOS. Jedná se o mocné nástroje s rozsáhlými možnostmi.
Je nezbytné si uvědomit, že soubory a adresáře smazané prostřednictvím rm
a rmdir
nejsou přesunuty do koše. Jsou bezprostředně a nevratně vymazány z vašeho počítače. Pokud dojde k nechtěnému odstranění dat těmito příkazy, jediným způsobem, jak je lze obnovit, je ze zálohy.
Odstranění souborů pomocí příkazu rm
Pro smazání jediného souboru v aktuální složce použijte příkaz rm
, následovaný mezerou a názvem souboru.
rm soubor_1.txt
Pokud se soubor nenachází v aktuálním adresáři, zadejte kompletní cestu k jeho umístění.
rm ./cesta/k/souboru/soubor_1.txt
S příkazem rm
lze pracovat i s více soubory najednou. Pokud zadáte více názvů, budou všechny tyto soubory smazány.
rm soubor_2.txt soubor_3.txt
Pro výběr skupin souborů lze využít zástupné znaky. Hvězdička (*
) zastupuje libovolný počet znaků a otazník (?
) reprezentuje právě jeden znak. Následující příkaz vymaže všechny soubory s příponou .png
v aktuální složce.
rm *.png
Tento příkaz odstraní soubory, které mají příponu s jedním znakem. Vymaže například Soubor.1
a Soubor.2
, ale ne Soubor.12
.
rm *.?
Při pokusu o smazání souboru chráněného proti zápisu budete vyzváni k potvrzení akce. Odpovězte stisknutím klávesy y
(ano) nebo n
(ne) a stiskněte klávesu Enter.
Pro snížení rizika při používání zástupných znaků s příkazem rm
, využijte volbu -i
(interaktivní). Ta vyžaduje potvrzení smazání u každého souboru.
rm -i *.dat
Volba -f
(force) naopak potlačuje interaktivní dotazy. Nevyžaduje potvrzení, ani u souborů chráněných proti zápisu.
rm -f nazev_souboru
Odstranění složek pomocí příkazu rm
Pro odstranění prázdné složky použijte volbu -d
(directory). Stejně jako u souborů, zástupné znaky (*
a ?
) lze využít i u názvů složek.
rm -d slozka
Zadáním více názvů složek se vymažou všechny zadané prázdné složky.
rm -d slozka1 slozka2 /cesta/k/slozka3
Pro odstranění složek, které nejsou prázdné, použijte volbu -r
(recursive). Tato volba odstraní složku, včetně všech obsažených souborů a podsložek.
rm -r slozka1 slozka2 slozka3
Pokud je složka nebo soubor chráněn proti zápisu, budete opět vyzváni k potvrzení smazání. Pro smazání neprázdných složek a zároveň potlačení dotazů použijte kombinaci voleb -r
(rekurzivní) a -f
(vynutit).
rm -rf slozka
Zde je třeba být velmi opatrný. Chyba v příkazu rm -rf
může způsobit ztrátu dat nebo i selhání systému. Věnujte proto zvýšenou pozornost a obezřetnost. Pro lepší pochopení struktury složek a souborů, které budou smazány, použijte příkaz tree
.
V systémech Ubuntu a dalších distribucích založených na Debianu, nainstalujte tento balíček pomocí nástroje apt-get
. V jiných distribucích použijte správce balíčků vašeho systému.
sudo apt-get install tree
Po spuštění příkazu tree
se zobrazí přehledný diagram struktury složek a souborů v dané složce.
tree
Můžete také zadat cestu k příkazu tree
, čímž se diagram vygeneruje z jiné složky.
tree cesta/k/slozka
Příkaz rm
nabízí i další pokročilé volby, jako například --one-file-system
, --no-preserve-root
, a --preserve-root
, které jsou však určeny pouze pro zkušené uživatele. V případě nesprávného použití hrozí riziko smazání systémových souborů. Pro více informací se podívejte do manuálových stránek.
Odstranění složek pomocí příkazu rmdir
Pro odstranění složek lze použít i příkaz rmdir
. Rozdíl mezi rm
a rmdir
je v tom, že rmdir
může odstranit pouze prázdné složky. Nikdy nesmaže soubory.
Nejjednodušším případem je smazání jedné prázdné složky. Stejně jako u rm
, můžete do rmdir
zadat více názvů složek nebo cestu.
Pro smazání složky v aktuálním adresáři zadejte její název do rmdir
:
rmdir slozka
Pro odstranění více složek zadejte seznam názvů:
rmdir slozka1 slozka2 slozka3
Pro smazání složky, která není v aktuálním adresáři, zadejte celou cestu:
rmdir /cesta/k/slozka
Pokud se pokusíte smazat složku, která není prázdná, rmdir
zobrazí chybovou zprávu. V následujícím příkladu rmdir
úspěšně smaže složku klienti
, ale odmítne smazat složku projekty
, protože ta obsahuje soubory. Složka projekty
a její obsah zůstanou nedotčeny.
Když rmdir
zobrazí chybu „Directory not empty“, přestane zpracovávat další složky, které byly zadány. Pokud jste se pokusili smazat čtyři složky a v první byly soubory, rmdir
zobrazí chybu a nic dalšího neprovede. Tuto chybu lze ignorovat pomocí volby --ignore-fail-on-non-empty
. Tímto způsobem se budou zpracovávat i další složky.
V následujícím příkladu byly do rmdir
zadány dvě složky: work/reports
a work/quotes
. Byla použita volba --ignore-fail-on-non-empty
. Složka work/reports
obsahuje soubory, takže ji rmdir
nemůže smazat. Volba --ignore-fail-on-non-empty
donutí rmdir
chybu ignorovat a pokračovat k další složce, kterou je work/quotes
. Tato složka je prázdná, a proto ji rmdir
úspěšně smaže.
Použitý příkaz:
rmdir --ignore-fail-on-non-empty work/reports /work/quotes
Volba -p
(parents) umožňuje odstranit složku a zároveň její nadřazené složky. Toto funguje tak, že rmdir
začne od cílové složky a poté postupuje zpět k nadřazeným složkám. Ty by měly být nyní prázdné a mohou být tedy také smazány pomocí rmdir
. Tento proces se opakuje na zadané cestě.
V následujícím příkladu je příkaz pro rmdir
:
rmdir -p work/invoices
Složky faktury
i work
budou dle potřeby vymazány.
Ať už používáte Bash nebo jiný shell, Linux poskytuje flexibilní a výkonné nástroje pro mazání složek a souborů přímo z příkazového řádku. Někteří uživatelé preferují práci v terminálu, jiní nemají na výběr. Může jít o servery bez grafického rozhraní nebo vzdálené relace na systémech bez monitoru, jako je Raspberry Pi. Tyto příkazy jsou ideální pro takové situace.
Bez ohledu na váš preferovaný pracovní styl, tyto příkazy se hodí pro zahrnutí do skriptů shellu. Pokud je skript spuštěn úlohou cron, může to automatizovat rutinní úkoly údržby, jako je promazávání nepotřebných souborů logů. Při prozkoumávání tohoto případu použití mějte na paměti sílu těchto příkazů, vše důkladně testujte a vždy si udržujte aktuální zálohu.