Linux: การลบซ้ำแบบปลอดภัยภายในสคริปต์


0

ฉันกำลังทำงานกับสคริปต์อัตโนมัติที่ทำงานบนกล่อง Linux (Debian) สคริปต์เหล่านั้นเริ่มจากตัวจัดตารางเวลาและจัดการไฟล์ภายในไดเรกทอรีของตนเอง

ในตอนท้ายของสคริปต์ฉันต้องลบไฟล์ชั่วคราว

ขณะนี้ฉันชอบสิ่งนี้:

#check that some variables are not empty
if [[ -z $var1 || -z $var2 || -z $var3 ]]; then
  echo "Some var is empty"
  exit 1
fi
workingdir=$var1/$var2
#some checks on working directory
if [[ ! -d $workingdir ]]; then
  echo "Directory error"
  exit 1
fi
cd $workingdir
if [[ $(pwd) != $workingdir ]]; then
  echo "Change directory error"
  exit 1
fi
#...here goes the main part of the script
#and at the end, the "cleaning"
if [[ -d $workingdir/temp/$var3 ]]; then
  find $workingdir/temp/$var3 -delete;
fi

คุณมีความคิดที่ฉันสามารถใช้เพื่อลดความเสี่ยงของการลบอะไรผิดหรือเปล่า?

ขอบคุณ.

ความนับถือ


1
สิ่งแรก: "double-quote $variables".
Kamil Maciorowski

ขอบคุณสำหรับลิงค์นี้ ฉันค้นหามาระยะหนึ่งแล้วและฉันไม่แน่ใจว่าจะอ้างอิงสองเท่าภายในเพื่อ / วนด้วย wildcard ได้อย่างไร ฉันควรใช้เครื่องหมายคำพูดคู่รอบ ๆ ตัวแปรเท่านั้นและปล่อยไวลด์การ์ดออกเช่นนี้หรือไม่? for f in "$workingdir"*; do...
lennelei

ฉันไม่เห็นไวยากรณ์ดังกล่าวในคำถาม คุณไม่ควรถามคำถามใหม่ในความคิดเห็น อ้าง*จะไม่ได้รับการขยายตัว ทำไมคุณไม่ลองecho "$workingdir"*, echo "$workingdir*", echo "$workingdir"/*และecho "$workingdir/*"และดูตัวเอง?
Kamil Maciorowski

ฉันขอโทษสำหรับคำถามฉันจะเปิดโพสต์ใหม่
lennelei

คำตอบ:


1

สคริปต์ของคุณรู้ว่าไฟล์ใดถูกสร้างขึ้นและอยู่ที่ไหน

ข้อความทั่วไปนี้เป็นจุดสำคัญที่นี่ หากคุณต้องการลบเฉพาะไฟล์ที่คุณสร้างขึ้นจริงๆให้ติดตามว่าคุณสร้างไฟล์ใด โดยทั่วไปแล้วคุณจะทำ:

TMP1=$(mktemp -t example.1.XXXXXX)
TMP2=$(mktemp -t example.2.XXXXXX)

เพื่อสร้างไฟล์ temp ของคุณ (ดูman mktempรายละเอียด) และทำ

rm -f "$TMP1" "$TMP2"

เมื่อคุณทำไฟล์เทมเปอร์เสร็จแล้ว หรือคุณสามารถสร้างไดเรกทอรีชั่วคราวและลบไดเรกทอรีนั้นได้

สิ่งที่คุณไม่ควรทำคือ

rm -f /tmp/example.?.*

เพราะมันจะลบไฟล์ชั่วคราวสำหรับอินสแตนซ์ที่กำลังรันอื่นของสคริปต์เช่นกัน


จริงๆแล้วมันซับซ้อนกว่าเล็กน้อย: สคริปต์เริ่มต้นงานจาวาซึ่งใช้ตัวแปร $ workingdir และ $ var3 เพื่อเก็บข้อมูลชั่วคราวในโฟลเดอร์ $ workingdir / temp / $ var3 ฉันไม่ต้องการลบโฟลเดอร์นั้นในจาวา job เพราะฉันอาจต้องการมัน (ในกรณีที่เกิดความล้มเหลว) นั่นเป็นเหตุผลที่ฉันดูแนวคิดเพื่อรักษาความปลอดภัยสคริปต์
lennelei

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