ฉันมีไฟล์ข้อความสองสามพัน gzipped ในไดเรกทอรีย่อยที่แตกต่างกันและใช้ชุดย่อยของไฟล์เหล่านี้เป็นอินพุตสำหรับโครงการเมื่อไม่กี่ปีที่ผ่านมา ย้อนกลับไปฉันมีสำเนาของไฟล์ที่ฉันใช้จริงในไดเรกทอรีเดียว แต่ได้ลบไฟล์นี้แล้วเก็บเฉพาะรายการไฟล์ที่คลายซิปเหล่านี้ในโฟลเดอร์นั้น
นี่เป็นความคิดเริ่มต้นของฉันLIST
คือรายการไฟล์ PARENTDIR
เป็นไดเร็กทอรีระดับบนซึ่งไฟล์ทั้งหมดอยู่ในไดเร็กทอรีย่อยต่างๆ แนวคิดก็คือการค้นหาจดหมายเหตุทั้งหมดในไดเรกทอรีย่อยใด ๆ ที่พวกเขาเป็นและ gunzip พวกเขาไปNEWDIR
#!/usr/bin/env bash
LIST="listfile.txt"
PARENTDIR="/home/user/old/project"
NEWDIR="/home/user/old/project/2016"
while read line;
do
ARCHIVE="$(find $PARENTDIR -name "$line*")"
gunzip --stdout $ARCHIVE >$NEWDIR/$line
done <$LIST
ฉันดูเหมือนจะไม่ได้รับคำสั่ง find มันทำงานได้โดยไม่ต้องใช้ตัวแปร แต่ไม่ใช่กับแม้จะไม่มีการทดแทนคำสั่งเรียกใช้บรรทัดคำสั่ง การรวมราคาและบัตรเสริมของฉันไม่ถูกต้อง แต่ฉันไม่สามารถทำให้ถูกต้องการขยายตัวที่หลากหลายไม่ได้ช่วยอะไรและฉันคิดว่าฉันติดอยู่ ...
echo "$ARCHIVE"
แสดงผลบรรทัดว่างecho $line
แสดงสิ่งที่ฉันคาดหวัง ฉันรวมset +
แล้วset -
แต่ดูเหมือนจะไม่มีอะไรเกิดขึ้นเช่นกัน - แต่ฉันไม่คุ้นเคยกับฉากนี้อย่างแน่นอน
find... -exec gzip {} ;
ขยายขนาดไฟล์เก็บถาวรสองเท่าหรือไม่
echo "$ARCHIVE"
เพื่อดูว่าเกิดอะไรขึ้น ... หรือset +
ก่อนและset -
หลังส่วนที่จะทำการดีบัก หากมีช่องว่างที่คุณต้องการใช้" $variable"
... จะเกิดอะไรขึ้นหากพบว่ามีการเก็บถาวรที่สอดคล้องกับคีย์มากกว่าหนึ่งรายการ ดีกว่าfind... -exec gzip {} ;