GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit soubory a adresáře v Linuxu

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 dir1other_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.


Linux
  1. Jak vyhledávat a odstraňovat adresáře rekurzivně v systému Linux

  2. Jak zakázat automatické mazání souborů v adresářích /tmp a /var/tmp v CentOS / RHEL 5,6

  3. Jak najít a odstranit prázdné adresáře a soubory v Linuxu

  1. Jak odstranit soubory a adresáře v Linuxu z příkazového řádku

  2. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  3. Jak odstranit soubory a adresáře v příkazovém řádku Linuxu [Výukový program pro začátečníky]

  1. Linux Odstraňte soubory a adresáře

  2. UNIX / Linux :Jaká je správná oprávnění adresářů /tmp a /var/tmp

  3. Jak změnit výchozí /tmp na /home/user/tmp