-Bash /bin /rm lista argumentów zbyt długo - rozwiązanie

-Bash /bin /rm lista argumentów zbyt długo - rozwiązanie

Objawy

Ten komunikat o błędzie pojawia się, gdy próbujesz usunąć, przenieść lub skopiować długą listę plików. Podczas korzystania z powłoki polecenie może zaakceptować tylko ograniczoną liczbę argumentów. Gdy liczba argumentów dostarczonych do polecenia przekroczy dozwoloną liczbę argumentów, pojawi się komunikat o błędzie:

-bash: /bin /rm: lista argumentów zbyt długo 
polecenie Linux, aby znaleźć limit maksymalnych argumentów:
# getConf arg_max 2097152 

Przykład:

# rm * -Bash: /bin /rm: lista argumentów zbyt długa 

Rozwiązanie

Istnieje liczba rozwiązań tego problemu. Po pierwsze, jeśli nie ma plików w katalogu, chcielibyśmy zachować, najlepszym i najszybszym rozwiązaniem jest po prostu usunięcie całego katalogu i ponowne odtworzenie. Zanim przejdziesz do upewnienia się, że katalog nie zawiera plików, które chcesz zachować i że weźmiesz pod uwagę uprawnienia i własność tego katalogu.

$ cd… / $ ls -d myDirectory $ rm -fr myDirectory $ mkdir myDirectory 

Drugim rozwiązaniem jest zaangażowanie pętli dla i usunięcie wszystkich plików jeden:

$ dla i in *; do rm „$ i”; zrobione 

lub znacznie szybciej za pomocą printf I Xargs:

$ printf '%s \ 0' * | Xargs -0 Rm 

Lub

$ Time Echo -n * | tr "\ 0 '| xargs -0 rm 

Jednak powyższe rozwiązanie ma swoje własne ograniczenie, ponieważ może również usunąć pliki, które chcielibyśmy zachować, jeśli nie ma odpowiedniego wyrażenia regularnego. Jeśli chodzi o przykład tutaj, usuniemy tylko *.tekst akta:

$ dla i w *.tekst; do rm „$ i”; zrobione 

Ostatnim i proponowanym rozwiązaniem jest użycie Regex do podziału wszystkich plików na mniejsze partie. Znajdź podobny wzór we wszystkich plikach i podziel je na mniejsze grupy. Na przykład najpierw usuń, skopiuj lub przenieś wszystkie pliki, które zaczynają się od A i mają rozszerzenie tekst, potem wszystkie pliki, które zaczynają się od B i tak dalej.:

$ rm a*.txt $ rm b*.tekst 

Możesz także zrobić powyższe dla wszystkich liter za pomocą pętli dla:

$ dla i in $ (echo a… z); do rm $ i*.tekst ; zrobione 

Powiązane samouczki Linux:

  • Jak przesuwać folder na Linux
  • Podstawowe polecenia Linux
  • Polecenia Linux: Top 20 najważniejsze polecenia, które musisz…
  • VIM Editor Basics w Linux
  • Skrypt bash: Wykorzystanie flag z przykładami argumentów
  • Jak skonfigurować serwer OpenVPN na Ubuntu 20.04
  • Polecenie człowieka w Linux z przykładami
  • Ubuntu 20.04: Lista klientów torrentów
  • Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
  • Jak zarządzać historią Bash