ค้นหาไฟล์ที่ลงท้ายด้วยตัวเลข


10

ฉันกำลังพยายามสร้างสคริปต์สำรองในขณะที่ล็อกไฟล์มีขนาดใหญ่ขึ้นเรื่อย ๆ สิ่งที่ฉันมีคือจัดการไฟล์ปัจจุบัน (เช่นsecureไฟล์ใน/var/log/) และลบเนื้อหาออกจากไฟล์นั้น แต่มีบางไฟล์ที่มีชื่อเช่นนี้secure.1, secure.2และทั้งหมดนี้ผมชอบที่จะนับพวกเขาและถ้าตัวเลขเป็นใหญ่แล้ว2จะเก็บพวกเขาทั้งหมด ฉันไม่พบวิธีการค้นหาไฟล์นี้หรือนับพวกเขา ความคิดแรกที่เกิดขึ้นกับฉันคือ:

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

และสิ่งนี้จะพิมพ์เสมอ1เนื่องจากมีไฟล์secure.1เดียว ฉันจะนับเช่นเดียวกับในการวนรอบที่ฉันสามารถระบุช่วงของจำนวนเช่น{1..5}หรือคล้ายกันได้ มีวิธีการแยกไฟล์นี้และทำให้พวกเขาเป็นหนึ่งและพวกเขาสำรองหรือลบหรือสิ่งที่เคย ... หรือก่อนอื่นฉันจะหาหมายเลขทั้งหมดนี้ที่ลงท้ายด้วยหมายเลข


1
คุณลืมที่จะอ้างถึงสัญลักษณ์แทน? find /var/log/ -name '*.1' ...
muru

1
ฉันคิดว่าคุณควรตรวจสอบlogrotateเพื่อจุดประสงค์ของคุณ
Costas

คำตอบ:


15

ด้วยง่าย-name:

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

หรือตัวเลขใด ๆ :

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

หรือถ้าตัวอักษรอื่น ๆ เป็นไปได้หลังจากตัวเลข:

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

วิธีการค้นหาผู้ที่มีเพียงหลักในชื่อของพวกเขา?
letthefireflieslive

3

หากต้องการค้นหาชื่อไฟล์ที่ลงท้ายด้วยช่วงจำนวนตั้งแต่.[1 ถึง 5]

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

1

ทำไมไม่เพียงแค่ ...

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

คุณไม่จำเป็นต้องfindเท่าที่ผมสามารถบอกได้ - เปลือกใช้ globs -nameเดียวกันมันไม่ใน และหากไฟล์ทั้งหมดอยู่ในไดเรกทอรีเดียว ... แน่นอนถ้ามีไดเรกทอรีย่อยที่คุณสนใจก็findอาจเป็นประโยชน์ได้เช่นกัน - การเดินต้นไม้ในเปลือกอาจทำให้ปวดหัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.