คุณกำลังอ้างถึงนรกที่นั่น
ของคุณ หา
คำสั่งส่งผ่านไปยัง sh -c
การโต้แย้งเช่น
mkdir -p "$(dirname /mnt/data/test/20220508/mnt/data/abc/def.log)";touch /mnt/data/test/20220508/mnt/data/abc/def.log; du -S /mnt/data/abc/def > /mnt/data/test/20220508/mnt/data/abc/def.log; awk -F'\t' '{print "INSERT INTO DATE20220508(folder_size, folder_location) VALUES('$1', '$2');"}' /mnt/data/test/20220508/mnt/data/abc/def. บันทึก
ตอนนี้ ช
แยกวิเคราะห์สิ่งนี้ ลบหนึ่งระดับการอ้างอิง มันขยายความ $(นามสกุล /mnt/data/test/20220508/mnt/data/abc/def.log)
ถึง /mnt/data/test/20220508/mnt/data/abc
และตัวแปร $1
และ $2
ใน อึดอัด
เป็นสตริงว่าง (เนื่องจากไม่ได้รับพารามิเตอร์ตำแหน่ง) ให้
mkdir -p /mnt/data/test/20220508/mnt/data/abc;touch /mnt/data/test/20220508/mnt/data/abc/def.log; du -S /mnt/data/abc/def > /mnt/data/test/20220508/mnt/data/abc/def.log; awk -F\t '{print "INSERT INTO DATE20220508(folder_size, folder_location) VALUES(, );"}' /mnt/data/test/20220508/mnt/data/abc/def.log
(ฉันใส่เครื่องหมายคำพูดเดียวอีกครั้งรอบ ๆ อึดอัด
อาร์กิวเมนต์ข้อความโปรแกรมเพื่อความชัดเจน)
วิธีที่ง่ายที่สุดคือสร้างไฟล์สำหรับ อึดอัด
โปรแกรมที่คุณส่งต่อไปยัง อึดอัด
ผ่านทาง -ฉ
ตัวเลือก. ฉันก็จะแนะนำให้ทำการมอบหมายด้วย FS = "\t"
ในไฟล์นั้นแทนการใช้ไฟล์ -ฉ
ตัวเลือก.
สุดท้าย หากคุณไม่ได้ใช้งานไฟล์บันทึกใดๆ อีกต่อไป ยกเว้นการสร้างคำสั่ง SQL คุณสามารถทำให้สคริปต์ของคุณง่ายขึ้นได้อย่างมากโดยการไพพ์เอาต์พุตของ ดู่
โดยตรงกับ อึดอัด
, ชอบ:
DT=`วันที่ +"%Y%m%d"`
ค้นหา /mnt/data -maxความลึก 2 -ความลึกขั้นต่ำ 2 -type d -exec sh -c 'du -S {} | awk -v DT='$DT' -f /mnt/data/makeinserts.awk' \;
ด้วยไฟล์ /mnt/data/makeinserts.awk
ที่มีความบริสุทธิ์ อึดอัด
โปรแกรม:
เริ่มต้น{FS="\t"}
{พิมพ์ "INSERT INTO DATE"DT"(folder_size, folder_location) VALUES('"$1"', '"$2"');"}