Tento článek navazuje na sérii článků o Linuxovém shellu a pokrývá tři nejužitečnější způsoby mazání souborů a adresářů. Zabývali jsme se také výjimečnými případy, jako je mazání adresářů s velkým množstvím souborů uvnitř, mazání souborů nebo adresářů se speciálními znaky v názvech. Zlepšete své znalosti Linuxu za pouhých 5 minut.
příkaz „rmdir“

Než použijete rmdir musíte vědět, že smazané objekty neobnovíte zpět snadno.
Nyní otevřete terminál příkazového řádku, pokud používáte Linux nebo macOS. Pokud používáte Windows, můžete použít Windows Subsystem for Linux (WSL).
Před smazáním adresáře jej nejprve vytvořte:
$ mkdir /tmp/docs
Nyní jej smažeme pod názvem /tmp/docs pomocí následujícího příkazu:
$ rmdir /tmp/docs
rmdir je příkaz pro odstranění prázdných adresářů. Je to docela užitečné, protože jste chráněni před smazáním něčeho důležitého ze systému souborů.
Pojďme toto chování ověřit vložením souboru do adresáře, který bychom rádi smazali:
$ mkdir -p /tmp/docs
$ touch /tmp/docs/my_file
$ tree /tmp/docs
/tmp/docs
└── my_file
0 directories, 1 file
Pokud váš adresář není prázdný, zobrazí se následující chyba:
$ rmdir /tmp/docs
rmdir: /tmp/docs: Directory not empty
Chcete-li odstranit adresář, který obsahuje soubory, musíte použít rm příkaz:
$ rm -rf /tmp/docs
Odstranění několika adresářů pomocí zástupných znaků
Všechny příkazy konzoly v systému Linux mohou zpracovávat soubory a složky pomocí zástupných znaků (*) v názvu souboru nebo složky. Odstraníme následující strukturu složek:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
└── dir3
3 directories, 0 files
Chcete-li odstranit všechny adresáře, které začínají od adresáře musíme použít následující příkaz:
$ rmdir /tmp/docs/dir*
Zde je očekávaný výsledek:
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
příkaz „rm“ 

rm je univerzální příkaz, který dokáže odstranit nejen adresáře, ale i soubory. Ale výchozí chování rm příkaz neumožňuje odstranit žádné složky. Můžete použít -r nebo -R argumenty pro odstranění adresářů, včetně podadresářů.
Představme si, že máme následující strukturu systému souborů:
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
Pokud chcete smazat /tmp/docs adresář úplně, použijte následující příkaz:
$ rm -rf /tmp/docs
Kde:
- -r – pokus o odstranění všech podadresářů z určitého adresáře.
- -f – pokus o odstranění souborů bez předchozího potvrzení nebo povolení.
/bin/rm:Seznam argumentů je příliš dlouhý
Tato chybová zpráva se může zobrazit, když se pokoušíte odstranit adresář s mnoha soubory. K této chybě dochází kvůli počtu souborů poskytnutých do rm příkaz je větší než systémový limit velikosti argumentu příkazového řádku.
Nejjednodušší způsob, jak takovou složku smazat, je použít najít Chcete-li nejprve odstranit všechny soubory, a poté odstranit samotný adresář:
$ find /tmp/docs -type f -delete
$ rm -r /tmp/docs
Zde:
- /tmp/docs – adresář pro vyhledávání.
- -typ f – říká nástroji find, aby prohledával pouze soubory.
- -smazat – říká nástroji find, aby odstranil nalezené výsledky.
Můžete také vytvořit prázdnou složku a použít rsync nástroj:
$ mkdir empty_dir
$ rsync -a --delete empty_dir/ /tmp/docs/
Je to náročné na CPU, ale nejrychlejší způsob čištění /tmp/docs adresář.
příkaz „find“ 

Příkaz find je víceúčelový vyhledávací nástroj příkazového řádku, který vyžaduje samostatný článek, ale v našem případě jej použijeme k odstranění složek.
Smazat pomocí vzoru v názvu
Smažeme všechny adresáře podle vzoru dir* ve vnořených názvech adresářů:
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
K tomu použijte následující příkaz:
$ find /tmp/docs -type d -name 'dir*' -exec rm -rf {} +
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
Zde je najít příkaz vrátí všechny vnořené adresáře, jejichž název začíná adresářem :
$ find /tmp/docs -type d -name 'dir*'
/tmp/docs/dir2
/tmp/docs/dir3
/tmp/docs/dir1
A poté provede již známé rm -rf příkaz pro každý nález (proto používáme {} + sekvence).
Odstranění všech prázdných adresářů ve struktuře složek
V mnoha případech můžete chtít odstranit pouze prázdné složky ve struktuře složek. Pojďme smazat dir1 a other_dir z následujícího příkladu:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
│ └── my_file2
├── dir3
│ └── my_file3
└── other_dir
4 directories, 2 files
Zde je návod, jak to udělat:
$ find /tmp/docs -type d -empty -delete
$ tree /tmp/docs
/tmp/docs
├── dir2
│ └── my_file2
└── dir3
└── my_file3
2 directories, 2 files
Odstranění souborů se speciálními znaky (podle inode)
Pokud název vašeho adresáře obsahuje speciální znak nebo se skládá z neanglických slov, pak obvykle rm nebo rmdir příkaz vám nemusí fungovat. V takovém případě můžete tento adresář smazat pomocí jeho inode.
Inode – je číslo indexového uzlu, které představuje soubor nebo adresář v systému souborů.
Číslo inodu souboru nebo adresáře můžete najít pomocí následujícího příkazu:
$ ls -il /tmp/docs
total 0
8669007889 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:48 dir2
8669007891 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:46 dir3
V tomto příkladu dir2 složka má inode 8669007889 číslo.
Nyní můžeme tyto informace použít k jejich odstranění:
$ find /tmp/docs -inum 8669007889 -exec rm -rf {} +
Zde:
- -inum – říká nástroji find, aby vyhledal objekt systému souborů s číslem inodu 8669007889 .
- -exec rm -rf – říká nástroji find, aby zavolal rm pomocí -rm argumenty pro každý nález ({} + ).
Přehled
V tomto článku jsme popsali tři způsoby mazání adresářů v Linuxu. Zabývali jsme se také speciálními případy, jako je mazání velkých složek nebo adresářů se speciálními znaky v názvech.
Doufáme, že vám tento článek bude užitečný. Pokud ano, pomozte nám to šířit do světa.
Pokud znáte nějaké další zajímavé případy použití, kterými by se článek mohl zabývat, kontaktujte nás prosím v sekci komentářů níže.