GNU/Linux >> Znalost Linux >  >> Linux

Jak opravit /bin/rm:nelze spustit [Seznam argumentů je příliš dlouhý]

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!


Linux
  1. /usr/bin Vs /usr/local/bin Na Linuxu?

  2. Jak způsobit chybu „Příliš dlouhý seznam argumentů“?

  3. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  1. Jak spustit skript po ukončení relace xfce

  2. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  3. Kdy musím použít #!/bin/bash a kdy #!/bin/sh?

  1. Jak spouštět soubory .bin a .run v Debianu

  2. Jak opravit „/usr/bin/dirmngr“:Žádný takový soubor nebo adresář

  3. Rozdíl mezi /bin a /usr/bin