ฉันไม่ได้ใช้แทนการmv
ที่cp
คำสั่งเพื่อให้บรรลุมันว่าคุณมีความสามารถที่จะมีบาง logfiles เหมาะสมในสถานที่ที่มีการเรียกใช้ซอฟแวร์ อาจอยู่ใน dir ของผู้ใช้ที่แตกต่างกันหรือใน dir ของแอพและมีบันทึกทั้งหมดในที่เดียวว่าเป็นลิงก์ หากคุณใช้mv
คำสั่งคุณจะสูญเสียการเชื่อมโยงอย่างหนัก หากคุณใช้cp
คำสั่งแทนคุณจะเก็บฮาร์ดลิงก์นี้ไว้
รหัสของฉันเป็นสิ่งที่ชอบ:
TMP_FILE="$(mktemp "${TMPFILENAME}.XXX")"
for FILE in "${LOGFILE_DIR}"/* ; do
tail -n $MAXLINES "${FILE}" > "${TMP_FILE}"
if [ $(ls -g "${TMP_FILE}" | awk '{print $4}') -lt $(ls -g "${FILE}" | awk '{print $4}') ] ; then
cp "${TMP_FILE}" "${FILE}"
fi
done
ดังนั้นหากไฟล์อยู่ในระบบไฟล์เดียวกันคุณอาจให้สิทธิ์แตกต่างกันบางอย่างแก่ผู้ใช้และใน${LOGFILE_DIR}
ระยะเวลาที่คุณปรับเปลี่ยนเช่นฉัน
หากเป็นmv
คำสั่งคุณจะสูญเสียฮาร์ดลิงก์ระหว่างไฟล์ดังนั้นไฟล์ที่สองของคุณจะไม่เชื่อมต่อกับไฟล์แรก - อาจวางไว้ที่อื่น
หากที่อื่นคุณไม่อนุญาตให้ใครบางคนลบไฟล์บันทึกของคุณอยู่ด้วยกันและควบคุมได้ดีผ่านสคริปต์ของคุณเอง
logrotate
อาจจะดีกว่า แต่ฉันมีความสุขกับการแก้ปัญหานี้
อย่าถูกรบกวนโดย "" แต่ในกรณีของฉันมีไฟล์บางตัวที่มีช่องว่างและตัวอักษรพิเศษอื่น ๆ อยู่และถ้าฉันไม่ทำ "" หรือ {} ล็อตทั้งหมดก็ใช้งานไม่ได้
ตัวอย่างเช่นมี Dir ที่ไฟล์เก่าได้รับการซิปแบบอัตโนมัติOLDFILE.zip
และทุกอย่างที่ได้รับการซิปนั้นมีการระบุไว้ใน File .zip_log
ดังนั้น.zip_log
ใน Dir นี้ก็เช่นกัน แต่ในที่LOGFILE_DIR
ฉันมี:
ln .zip_log "${LOGFILE_DIR}/USER_ZIP_log"
ไฟล์ที่เท่ากันเนื่องจากเป็นฮาร์ดลิงก์
logrotate
เป็นทางออกที่สง่างาม