Příkaz rm se v Linuxu používá k mazání souborů a adresářů. Lze jej použít k odstranění několika souborů zadáním každého názvu souboru, nebo jej lze použít s -r
argument (rekurzivní ) k odstranění adresáře a celé adresářové stromové struktury, která se nachází pod ním.
Syntaxe, která se má použít pro příkaz rm je:
$ rm <file1> <file2> ... <fileN> $ rm -r <directory1> <directory2> ... <directoryN> <target_directory>
Odstranění souborů a adresářů v systému Linux
Tyto syntaxe lze také kombinovat a odstranit soubory a adresáře najednou:
$ rm -r file1 file2 file3 directory1 directory2
Můžete také zadat názvy souborů a adresářů pomocí zástupných znaků, pokud jsou názvy podobné, tj. začínají, končí nebo obsahují stejný vzor ve svém názvu. To je zvláště užitečné, když má být odstraněno velké množství souborů se stejnou příponou.
Chcete-li například odstranit všechny soubory, jejichž název začíná řetězcem „soubor ‘, můžeme spustit:
$ rm file*
Podobně smažete všechny soubory s příponou '.txt'
, můžeme spustit:
$ rm *.txt
Zástupné znaky v zásadě dělají:umístí všechny soubory nebo adresáře, které vyhovují vzoru zástupných znaků, jako argumenty pro rm . Teoreticky tedy neexistuje žádný limit na počet argumentů pro rm příkaz.
Odstranění velkého počtu souborů:Chyba „Příliš dlouhý seznam argumentů“
I když teoreticky ‘rm Neexistuje žádný limit na počet argumentů, existuje předdefinovaný limit na maximální počet argumentů, se kterými může pracovat jeden příkaz.
Toto je limit definovaný v systému Linux a je založen na velikosti zásobníku systému. Pokud tedy vzor zástupných znaků umístí jako argumenty desítky tisíc souborů nebo adresářů, program vyvolá chybu:„Seznam argumentů je příliš dlouhý “.
Vezměme si příklad složky, která obsahuje přibližně 2,5 lac (250 tis. ) soubory.
$ ls -l | wc -l $ ls | head
Zkusme je odstranit pomocí zástupného znaku.
$ rm file*
Dává tedy výše uvedenou chybu. Nyní se podívejme, jak můžeme tuto chybu vyřešit.
Řešení:Použijte příkaz Najít s argumentem „-exec“ k odstranění tisíců souborů
Příkaz find v podstatě vyhledává soubory v adresářích na základě různých parametrů, jako je vzor názvu souboru, přípona souboru atd.
Potom použijeme '-exec'
parametr ‘najít‘ což vám umožní spustit jakýkoli příkaz přes výstup find .
$ find . -maxdepth 1 -name "<filename_pattern>" -exec rm -r {} \;
Zde je první argument, '.'
(aktuální adresář) je adresář, kde najdete soubory. Pokud mají být odstraněny soubory z jiného adresáře, musíte zde zadat cestu k tomuto adresáři.
Argument '-maxdepth 1'
bere v úvahu pouze soubory a adresáře v aktuálním adresáři. Bez zadání této hloubky, příkaz najít bude zbytečně prohledávat všechny podadresáře.
Argument "-name"
se používá k vyhledání souborů a adresářů se vzorem řetězce. „vzor_název_souboru “ určuje vzor řetězce. Poté zadáme ‘rm -r‘
příkaz za argumentem '-exec'
.
Otevřené závorky '{ }'
jsou zástupný symbol pro argument, který má být použit z výstupu find.
$ find . -maxdepth 1 -name "file*" -exec rm -r {} \;
Jak vidíme, všechny soubory byly smazány. Stejný příkaz lze použít k hromadnému mazání adresářů, protože již předáváme '-r'
argument.
Závěr
V tomto článku jsme se dozvěděli o příkazu rm command a jak problém „Seznam argumentů je příliš dlouhý “ lze řešit pomocí „rm“ v kombinaci s „najít ‘ příkaz.
Pokud máte nějakou zpětnou vazbu nebo dotazy, dejte nám vědět v komentářích níže!