Odpowiedzi:
Jeśli nazwy plików są numerowane kolejno, po prostu uruchom następujące polecenie:
rm fileName_{100..100000}
execwywołanie narzuca limit liczby argumentów, które może mieć proces. Możesz go odzyskać za pomocą getconf ARG_MAX. Na przykład w moim systemie jest to 2097152(~ 2,1 miliona). Oznacza to, że rm(co nie jest wbudowane) zakończy się niepowodzeniem przy większej liczbie plików. Wbudowane polecenia nie mają tego problemu, podobnie jak inne proponowane rozwiązania.
Możesz spróbować tego polecenia również,
for i in $(seq 100 100000); do rm fileName_$i; done
Usunie wszystkie pliki (zakres od 100 do 100000), jeśli nazwa pliku zawiera liczby w kolejności sekwencyjnej.
Ogólnie można to osiągnąć na kilka sposobów:
rm fileName_{100..100000}
zostanie rozszerzony przez powłokę do około 100 000 nazw plików. Jeśli basename jest długą ścieżką, a liczba jest wystarczająco wysoka, możesz faktycznie przekroczyć maksymalną długość linii poleceń przy takim podejściu.
forpętla
for i in $(seq 100 100000); do rm fileName_$i; done
nie cierpi z powodu tego problemu, ale jest stosunkowo powolnym sposobem usuwania plików, ponieważ powłoka musi wykonać podstawienie zmiennej i uruchomić rm około 100 000 razy.
Obie powyższe metody mogą powodować ostrzeżenia, jeśli na przykład filename_101brakuje niektórych plików .
Zwykle rozwiązania oparte na find są lepsze, ponieważ działają tylko na plikach, które faktycznie tam są (podczas wykrywania). Istnieją jednak pewne subtelne różnice:
find . -name 'fileName_[100-100000]' -exec rm {} \;
nadal uruchomi rm program około 100 000 razy, a zastępując końcowy \;przez +, spróbuje zminimalizować liczbę podprocesów. Obie metody będą prawdopodobnie (znacznie lub nieco) wolniejsze niż użycie, -deletektóre w ogóle nie używa poleceń zewnętrznych, ale wywołuje wywołania systemowe.
Jednak zawsze najpierw sprawdzić, czy wzór faktycznie pasuje do plików, które chcesz kierować:
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
W takim przypadku usunąłbyś plik, który chcesz zachować, i pozostawiłeś pliki, które powinny zostać usunięte.
Użyj następującego polecenia:
find . -name 'fileName_[100-100000]' -exec rm {} \;
Spowoduje to usunięcie plików od 100 do 100000.
Więcej informacji: Witryna
[100-100000] Klasa charakter jedynie dopasowuje pojedynczy znak, więc może tylko dopasować 0 lub 1.
{x..y}całą listę. Na przykład, jeśliecho test{1..3}go użyjesz , zostanie rozwinięty,echo test1 test2 test3a następnie wykonany. Jak widać, drukujetest1 test2 test3. Podobnie, jeśli{x..y}nie jest powiązany z żadnym argumentem, po prostu wstawi tam liczby. Np. Poecho test {1..3}prostu wydrukujetest 1 2 3.