หมายเหตุ: แม้ว่าจะมีคำตอบจากเจฟฟ์-ชอลเลอร์ แต่ก็ขึ้นอยู่กับ zsh
; เลยอยากได้คำตอบตาม ทุบตี
.
ฉันต้องการสร้างสคริปต์ Bash เพื่อลบไฟล์เก่าอย่างมีเงื่อนไขจากไดเร็กทอรีสำรอง
มี 2 เงื่อนไขสำหรับการสำรองไฟล์ที่แตกต่างกัน 2 ไฟล์:
1 เก็บสำเนาล่าสุดของ Edge_Profile_*.tgz
และลบส่วนที่เหลือของ Edge_Profile_*.tgz
เฉพาะในกรณีที่มีอายุมากกว่า 5 วัน.
2 เก็บสำเนาล่าสุดของ Firefox_Profile_*.tgz
และลบส่วนที่เหลือของ Firefox_Profile_*.tgz
, ไม่สำคัญว่าพวกเขาจะอายุเท่าไหร่.
นี่คือวิธีที่ฉันได้แก้ไขคำตอบ AskUbuntu นี้: https://askubuntu.com/a/933098/928088
สคริปต์:
#!/bin/bash
LOG_FILE="/home/admn/Cleanup.log"
TEMP_LOG="/tmp/Temp_Cleanup.log"
mv $LOG_FILE $TEMP_LOG
{
cd /home/admn/ดาวน์โหลด/ทดสอบ;
echo "บันทึกการล้างข้อมูล:" `วันที่`
ค้นหา /home/admn/ดาวน์โหลด/ทดสอบ/Edge_Profile_*.tgz -type f \( -mtime +5 -printf 'Y\t' -o -printf 'N\t' \) -printf '%A@\t% p\0' |
จัดเรียง -zk2,2 | หัว -zn -1 | ขณะอ่าน -r -d '' flag _ file; ทำ \
กรณี "$flag" ใน
'Y') echo rm "$ไฟล์"
;;
*) echo "ข้าม $file (ใหม่เกินไป)"
;;
เอสแซค;
เสร็จแล้ว
เสียงสะท้อน
ค้นหา /home/admn/ดาวน์โหลด/ทดสอบ/Firefox_Profile_*.tgz -type f \( -printf 'Y\t' -o -printf 'N\t' \) -printf '%A@\t%p\0' |
จัดเรียง -zk2,2 | หัว -zn -1 | ขณะอ่าน -r -d '' flag _ file; ทำ \
กรณี "$flag" ใน
'Y') echo rm "$ไฟล์"
;;
*) echo "ข้าม $file (ใหม่เกินไป)"
;;
เอสแซค
เสร็จแล้ว
} &>> $LOG_FILE
แมว $TEMP_LOG >>$LOG_FILE
ทางออก;
เอาต์พุตในล็อกไฟล์ด้วย เสียงสะท้อน
:
/usr/local/scripts/cleanup.sh
rm /home/admn/ดาวน์โหลด/ทดสอบ/Edge_Profile_Jul_06_2021_00-35.tgz
rm /home/admn/ดาวน์โหลด/ทดสอบ/Edge_Profile_Jul_07_2021_00-35.tgz
....
ข้าม /home/admn/Downloads/Test/Edge_Profile_Jul_12_2021_00-35.tgz (ใหม่เกินไป)
ข้าม /home/admn/Downloads/Test/Edge_Profile_Jul_13_2021_00-35.tgz (ใหม่เกินไป)
....
rm /home/admn/ดาวน์โหลด/ทดสอบ/Firefox_Profile_Jul_01_2021_00-35.tgz
rm /home/admn/ดาวน์โหลด/ทดสอบ/Firefox_Profile_Jul_02_2021_00-35.tgz
....
เอาต์พุตในล็อกไฟล์ขณะรันสคริปต์จริง โดยไม่มี เสียงสะท้อน
:
/home/admn/Downloads/cleanup.sh: บรรทัดที่ 24: ข้าม /home/admn/Downloads/Test/Edge_Profile_Jul_12_2021_00-35.tgz (ใหม่เกินไป): ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
/home/admn/Downloads/cleanup.sh: บรรทัดที่ 24: ข้าม /home/admn/Downloads/Test/Edge_Profile_Jul_13_2021_00-35.tgz (ใหม่เกินไป): ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
....
ไฟล์ทั้งหมดในไดเรกทอรี: 20 ไฟล์
1, Edge_Profile_*.tgz: ตั้งแต่วันที่ 6 กรกฎาคม ถึง 17 กรกฎาคม: 12 ไฟล์
2, Firefox_Profile_*.tgz: ตั้งแต่วันที่ 1 กรกฎาคม ถึง 08 กรกฎาคม: 8 ไฟล์
ประเด็น:
(1) ฉัน คิด สคริปต์ใช้งานได้ แต่ฉันไม่แน่ใจเพราะฉันได้แก้ไขส่วนใหญ่โดยไม่รู้ว่าเกิดอะไรขึ้น
(2) เอาต์พุตไปยังล็อกไฟล์:
ฉันต้องการผลลัพธ์ที่เหมือนกันทุกประการในล็อกไฟล์ที่ฉันได้รับ เสียงสะท้อน
ยกเว้นเพียงชื่อไฟล์ (ไม่ใช่พาธแบบเต็ม) เช่น:
rm Edge_Profile_Jul_11_2021_00-35.tgz
ข้าม Edge_Profile_Jul_12_2021_00-35.tgz (ใหม่เกินไป)
ระบบปฏิบัติการ: Ubuntu MATE 21.04
ขอบคุณมาก.