Chcę usunąć pliki, których rozmiar zawiera się między pewnymi wartościami. Na przykład mam następującą listę plików:
-rw-r--r-- 1 smsc sys 558 Apr 30 13:07 stats.sfe.1.20120430130513.xml.Z
-rw-r--r-- 1 smsc sys 388 Apr 30 15:32 stats.sfe.1.20120430153013.xml.Z
-rw-r--r-- 1 smsc sys 386 Apr 30 15:36 stats.sfe.1.20120430153513.xml.Z
-rw-r--r-- 1 smsc sys 389 Apr 30 15:42 stats.sfe.1.20120430154013.xml.Z
-rw-r--r-- 1 smsc sys 390 Apr 30 16:02 stats.sfe.1.20120430160013.xml.Z
-rw-r--r-- 1 smsc sys 385 Apr 30 16:12 stats.sfe.1.20120430161013.xml.Z
Z powyższej listy chcę usunąć tylko pliki, których rozmiar waha się między 386b a 390b . Wiem, że mogę użyć następującego polecenia, aby usunąć pliki, których rozmiar przekracza pewną wartość <size>
:
find . -size +<size>-delete
Ale jak mogę dodać jeszcze jedną granicę dla plików, których rozmiar jest mniejszy niż podana wartość?
find
warunki są logicznie ORAZ domyślnie, więc po prostu-size
wybierz inną opcję dla drugiej granicy.Odpowiedzi:
Zakres jest po prostu górną granicą ORAZ dolną granicą. Ze
find
specyfikacji :Wszystko, co musisz zrobić, to określić obie granice wielkości przed
-delete
akcją.źródło
-a
W wyraźnejAND
operatora, który pozwala łączyć dwa prawyborach. W takim przypadku utworzenie zakresu za pomocą-size
.find . -size +386b -a -size -390b -exec rm -f {} \;
Zauważ, że rozmiar jest argumentem liczbowym, który można opcjonalnie poprzedzić przy pomocy
+
i-
. Odman 1 find
:źródło
find
warunki są logicznie ORAZ domyślnie. Właśnie dodałem jeszcze jedensize
warunek i działało dobrze! Ostateczne polecenie wygląda następująco:find . -maxdepth 1 -size +358c -size -395c -delete
Ilekroć
find
oczekuje liczby, możesz umieścić+
przed nią znak oznaczający więcej niż ten numer lub-
znak oznaczający mniej niż ten numer. Są to ścisłe nierówności:+3
i-7
oznaczają 4, 5 lub 6.W przypadku
-size
podstawowego należy dodać przyrostekc
wskazujący, że liczba jest liczbą bajtów. Możesz łączyć wiele obiektów podstawowych, aby połączyć je (w niektórych wersjach możesz umieścić-a
lub-and
między nimi). A zatem:W Zsh możesz użyć
L
kwalifikatora glob . Domyślną jednostką są bajty; jakfind
postacie+
i-
wskazują na ścisłe nierówności.(Powyższe polecenie nie powtarza się w podkatalogach; jeśli potrzebujesz, dodaj
**/
przed wzorcem).źródło
Jeden sposób przy użyciu
perl
:źródło