ฉันมี tarball ขนาดใหญ่ที่กำลังยุ่งกับ FTP'd จากระบบรีโมตไปยังระบบโลคอลของเรา
ฉันต้องการทราบว่าเป็นไปได้ไหมที่จะเริ่มการเปิดใช้งานแบบไม่ระบุชื่อให้บอกว่ามี 50 ไฟล์ในแต่ละครั้งเพื่อให้สามารถประมวลผลไฟล์เหล่านั้นได้ในขณะที่มีการถ่ายโอน
ฉันมี tarball ขนาดใหญ่ที่กำลังยุ่งกับ FTP'd จากระบบรีโมตไปยังระบบโลคอลของเรา
ฉันต้องการทราบว่าเป็นไปได้ไหมที่จะเริ่มการเปิดใช้งานแบบไม่ระบุชื่อให้บอกว่ามี 50 ไฟล์ในแต่ละครั้งเพื่อให้สามารถประมวลผลไฟล์เหล่านั้นได้ในขณะที่มีการถ่ายโอน
คำตอบ:
นี่คือคำอธิบายโดยละเอียดเกี่ยวกับวิธีที่เป็นไปได้ที่จะแยกไฟล์เฉพาะจากไฟล์เก็บถาวร tar GNU โดยเฉพาะสามารถใช้เพื่อแตกไฟล์เดียวหรือมากกว่าจาก tarball เพื่อแยกสมาชิกที่เก็บถาวรเฉพาะให้ชื่อสมาชิกที่แน่นอนของพวกเขาเป็นข้อโต้แย้ง
ตัวอย่างเช่น:
tar --extract --file={tarball.tar} {file}
นอกจากนี้คุณยังสามารถแยกไฟล์เหล่านั้นที่ตรงกับรูปแบบ globbing เฉพาะ (ตัวแทน) ตัวอย่างเช่นหากต้องการแยกไฟล์จาก cbz.tar ทุกไฟล์ที่ขึ้นต้นด้วย pic ไม่ว่าจะใส่คำนำหน้าไดเรกทอรีคุณสามารถพิมพ์:
tar -xf cbz.tar --wildcards --no-anchored 'pic*'
หากต้องการแตกไฟล์ php ทั้งหมดให้ป้อน:
tar -xf cbz.tar --wildcards --no-anchored '*.php'
ที่ไหน
-x
: สั่ง tar เพื่อแยกไฟล์
-f
: ระบุชื่อไฟล์ / ชื่อ tarball
-v
: Verbose (แสดงความคืบหน้าขณะทำการแตกไฟล์)
-j
: ตัวกรองเก็บถาวรผ่าน bzip2 ใช้เพื่อขยายไฟล์. bz2
-z
: ตัวกรองเก็บถาวรผ่าน gzip ใช้เพื่อขยายไฟล์. gz
--wildcards
: สั่งให้ tar รักษาอาร์กิวเมนต์บรรทัดคำสั่งเป็นรูปแบบกลม
--no-anchored
: แจ้งว่ารูปแบบนี้ใช้กับชื่อสมาชิกหลัง / ตัวคั่นใด ๆ
-t
รายการจนกว่า tarball จะถูกดาวน์โหลดอย่างสมบูรณ์ ณ เวลาใดเวลาหนึ่งรายการจะแสดงชื่อไฟล์ที่ถูกถ่ายโอนหรือถูกโอนย้ายเท่านั้น ไม่เต็มรูปแบบรายการ; จนกว่าจะดาวน์โหลดอย่างเต็มที่
ไม่ได้ลองด้วยตัวเอง แต่ลองทำสิ่งนี้:
tar xvf archive.tar | head -n50
Tar ส่งเอาต์พุตบรรทัดไปที่ STDOUT สำหรับแต่ละไฟล์ที่แยกแล้วhead
คำสั่งจะฆ่าไพพ์หลังจาก 50 บรรทัด เมื่อท่อกำลังจะตายฉันคาดว่าน้ำมันดินจะตายเช่นกัน
head
ขออภัยที่ควรจะได้รับแน่นอน ให้ฉันเปลี่ยนคำตอบ
tar
อาจแยกไฟล์มากกว่า 50 ไฟล์ก่อนที่จะเป็น SIGPIPEd และโดยเฉพาะอย่างยิ่งไฟล์อาจแตกไฟล์สุดท้ายที่ไม่สมบูรณ์
tar -tvf tarfile.tar
ให้รายชื่อไฟล์ทั้งหมดแก่คุณ tarfile.tar
tar -xvf tarfile.tar fileToRestore
คำสั่งนี้จะกู้คืน fileToRestore
หากต้องการ untar หลายไฟล์ แต่ไม่สามารถทำได้ทั้งหมด:
คุณใส่รายชื่อไฟล์ทั้งหมดtarfile.tar
ลงในtar.txt
tar -tvf tarfile.tar > tar.txt
ตอนนี้tar.txt
มีรายชื่อไฟล์ทั้งหมดtarfile.tar
และคุณสามารถทิ้งเฉพาะไฟล์ที่คุณต้องการกู้คืนหรือด้วย ...
head -n50 tar.txt > tar2.txt
คุณสามารถใส่บรรทัดเหล่านี้ลงในไฟล์
cat tar.txt|while read line
do
tar -xvf tarfile.tar ${line}
done
หรือไฟล์สคริปต์ที่สมบูรณ์:
#!/bin/bash
if [[ "$1" = "" || "$2" = "" ]]
then
echo ""
echo "Uso: untar-list.sh tarfile.tar listfile.txt"
echo ""
exit 1
fi
tarfile=$1
file=$2
if [[ ! -f ${tarfile} ]]
then
echo ""
echo "Archivo ${tarfile} no existe"
echo ""
exit 1
fi
if [[ ! -f ${file} ]]
then
echo ""
echo "Archivo ${file} no existe"
echo ""
exit 1
fi
cat ${file}|while read line
do
tar -xvf ${tarfile} ${line}
done
echo ""
echo "Finalizado"
echo ""
และนั่นคือทั้งหมดที่