Tìm tập tin kết thúc bằng số


10

Tôi đang cố gắng tạo một số tập lệnh sao lưu khi các tệp nhật ký ngày càng lớn hơn. Những gì tôi có là đối phó với tệp hiện tại, (ví dụ: securetệp trong /var/log/) và xóa nội dung khỏi tệp đó. Nhưng có một số tập tin có tên như: secure.1, secure.2và tất cả điều này tôi muốn đếm chúng, và nếu số lượng lớn sau đó 2để lưu trữ tất cả. Tôi không thể tìm thấy phương pháp để tìm tập tin này hoặc đếm chúng. Ý nghĩ đầu tiên đến với tôi là:

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

và điều này sẽ luôn luôn in 1như có một tập tin secure.1. Làm thế nào tôi có thể đếm như trong vòng lặp trong đó tôi có thể chỉ định một phạm vi số giống {1..5}hoặc tương tự. Có cách nào để tách các tệp này và làm cho chúng thành một và chúng sao lưu hoặc xóa hoặc bất cứ điều gì ... hoặc trước hết làm thế nào tôi có thể tìm thấy tất cả các số này kết thúc bằng số.


1
Bạn đã quên trích dẫn ký tự đại diện? find /var/log/ -name '*.1' ...
muru

1
Tôi nghĩ bạn nên kiểm tra logrotatecho mục đích của bạn.
Costas

Câu trả lời:


15

Với đơn giản -name:

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

hoặc cho bất kỳ chữ số nào:

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

hoặc nếu các ký tự khác có thể sau chữ số:

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

Làm thế nào để tìm những cái CHỈ chứa chữ số trong tên của họ?
letthefireflylive

3

Để tìm tên tệp kết thúc bằng một số phạm vi từ .[1 đến 5].

find /var/log/ -type f -regextype sed -regex ".*\.[1-5]$"

1

Tại sao không chỉ ...

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

Bạn không cần findxa như tôi có thể nói - cái vỏ sử dụng cùng một khối lượng của nó -name. Và nếu tất cả các tệp nằm trong một thư mục ... Tất nhiên, nếu có các thư mục con bạn cũng quan tâm thì findcó thể có ích - việc đi bộ trong vỏ có thể là một vấn đề đau đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.