Znajdź pliki, które kończą się numerem

10

Próbuję zrobić skrypt zapasowy, ponieważ pliki dziennika stają się coraz większe. Mam kopiowanie bieżącego pliku (na przykład secureplik do /var/log/) i usuwanie zawartości z tego pliku. Ale istnieją pewne pliki o nazwie typu: secure.1, secure.2a to wszystko i jak je policzyć, a jeśli liczba jest większa następnie 2je wszystkie archiwizacji. Nie mogę znaleźć metody znalezienia tych plików ani ich policzenia. Pierwszą myślą, która przyszła mi do głowy, było:

find /var/log/ -name *.1 | wc -l

i to zawsze będzie drukowane, 1ponieważ istnieje jeden plik secure.1. Jak mogę liczyć jak w pętli, w której mogę określić zakres liczb podobnych {1..5}lub podobnych. Czy istnieje sposób na rozdzielenie tych plików i utworzenie ich jako kopii zapasowej lub usunięcia lub co innego ... lub przede wszystkim, jak znaleźć wszystkie liczby, które kończą się cyframi.

użytkownik3523605
źródło
1
Czy zapomniałeś zacytować symbol wieloznaczny? find /var/log/ -name '*.1' ...
muru
1
Myślę, że powinieneś sprawdzić logrotateswój cel.
Costas

Odpowiedzi:

15

Z prostym -name:

find /var/log -name '*.[2-9]'

lub dla dowolnej cyfry:

find /var/log -name '*.[[:digit:]]'

lub jeśli po cyfrze są możliwe inne znaki:

find /var/log -name '*.[2-9]*'
jimmij
źródło
jak znaleźć te, które TYLKO zawierają cyfrę w nazwie?
letthefireflieslive
3

Aby znaleźć nazwy plików, które kończą się liczbami, należy .wybrać zakres od [1 do 5].

find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"
Avinash Raj
źródło
1

Dlaczego nie tylko ...

for log in /var/log/*.[1-5]
do whatever to "$log"
done

O findile wiem, nie potrzebujesz - powłoka używa tych samych globów, w których działa -name. A jeśli wszystkie pliki znajdują się w jednym katalogu ... Oczywiście, jeśli istnieją podkatalogi, którymi również jesteś zainteresowany, findmoże to być korzystne - chodzenie po drzewach w powłoce może być bólem głowy.

mikeserv
źródło