Sayı ile biten dosyaları bulma


10

Günlük dosyaları gittikçe büyüyor gibi bazı yedekleme komut dosyası yapmaya çalışıyorum. Ne var geçerli dosya (örneğin, securedosya /var/log/) başa çıkma ve o dosyadan içeriği kaldırmak. Ama böyle isimde bazı dosyalar şunlardır: secure.1, secure.2ve ben gibi tüm bu onları saymak ve sayı büyükse o zaman 2hepsini arşivlemek için. Bu dosyaları bulma veya sayma yöntemini bulamıyorum. Bana gelen ilk düşünce:

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

ve bu her zaman 1tek bir dosya olduğundan yazdırılır secure.1. Nasıl gibi {1..5}veya benzer bir dizi sayı belirtebilirsiniz döngü için gibi sayabilirim . Bu dosyaları ayırmak ve onları bir ve onları yedekleme veya silme ya da ne olursa olsun yapmak için bir yolu var mı ... ya da her şeyden önce nasıl sayı ile biten tüm bu numaraları bulabilirim.


1
Joker karakteri alıntılamayı unuttunuz mu? find /var/log/ -name '*.1' ...
muru

1
Bence logrotatesenin amacını kontrol etmelisin .
Costas

Yanıtlar:


15

Basit -name:

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

veya herhangi bir rakam için:

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

veya rakamdan sonra başka karakterler de mümkünse:

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

SADECE isminde rakam olanları nasıl bulabilirim?
letthefireflieslive

3

Bir sayı ile biten dosya adlarını bulmak için .[1 ila 5] arasında değişir .

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

1

Neden sadece ...

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

findSöyleyebildiğim kadarına ihtiyacın yok - kabuk içinde olduğu gibi globları kullanıyor -name. Ve tüm dosyalar tek bir dizinde ise ... Tabii ki, ilgilendiğiniz alt dizinler varsa, o findzaman faydalı olabilir - kabukta ağaçlar yürümek baş ağrısı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.