Mam pliki nazwa_pliku_1 , nazwa_pliku_2 ... nazwa_pliku_100000, gdzie nazwy plików są numerowane kolejno. Jak mogę usunąć pliki indeksu większe niż, powiedzmy 100 ?
command-line
herbata
źródło
źródło
{x..y}
całą listę. Na przykład, jeśliecho test{1..3}
go użyjesz , zostanie rozwinięty,echo test1 test2 test3
a 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
.exec
wywoł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 to2097152
(~ 2,1 miliona). Oznacza to, żerm
(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ż,
Usunie wszystkie pliki (zakres od 100 do 100000), jeśli nazwa pliku zawiera liczby w kolejności sekwencyjnej.
źródło
Ogólnie można to osiągnąć na kilka sposobów:
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.
for
pętlanie 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_101
brakuje 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: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,-delete
któ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ć:
W takim przypadku usunąłbyś plik, który chcesz zachować, i pozostawiłeś pliki, które powinny zostać usunięte.
źródło
Użyj następującego polecenia:
Spowoduje to usunięcie plików od 100 do 100000.
Więcej informacji: Witryna
źródło
+
, niż\;
- patrz tutaj . Lub, jeszcze lepiej, użyj-delete
polecenia find .[100-100000]
Klasa charakter jedynie dopasowuje pojedynczy znak, więc może tylko dopasować 0 lub 1.