ฉันจะบีบอัดไดเรกทอรีย่อยเป็นไฟล์เก็บถาวรแยกกันได้อย่างไร
ตัวอย่าง:
directory
subdir1
subdir2
ควรสร้าง subdir1 (.tar) .gz และ subdir2 (.tar) .gz
ฉันจะบีบอัดไดเรกทอรีย่อยเป็นไฟล์เก็บถาวรแยกกันได้อย่างไร
ตัวอย่าง:
directory
subdir1
subdir2
ควรสร้าง subdir1 (.tar) .gz และ subdir2 (.tar) .gz
คำตอบ:
สคริปต์ขนาดเล็กนี้ดูเหมือนจะเป็นตัวเลือกที่ดีที่สุดตามความต้องการของคุณ:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
มันจัดการกับไดเรกทอรีที่มีช่องว่างอย่างถูกต้องในชื่อของพวกเขา
เกี่ยวกับสิ่งนี้: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
คำอธิบาย:คุณรันการค้นหาในทุกรายการในไดเรกทอรีปัจจุบัน Maxdepth 0 ทำให้ไม่เรียกคืนต่ำกว่าอาร์กิวเมนต์ที่กำหนด (ในกรณีนี้ * หรือรายการทั้งหมดในไดเรกทอรีปัจจุบันของคุณ) อาร์กิวเมนต์ 'd' เป็น "-type" จะจับคู่กับไดเรกทอรีเท่านั้น จากนั้นผู้บริหารจะรัน tar ในสิ่งที่ตรงกัน ({} ถูกแทนที่ด้วยไฟล์ที่ตรงกัน)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
สิ่งนี้จะสร้างไฟล์ชื่อ blah.tar.gz สำหรับแต่ละไฟล์ในไดเรกทอรีที่ชื่อ blah
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
หากคุณมีมากกว่าไดเรกทอรีในไดเรกทอรี (เช่นไฟล์เช่น ls จะส่งคืนทุกสิ่งในไดเรกทอรี) จากนั้นใช้สิ่งนี้:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
grep -v ไม่รวมไดเรกทอรีปัจจุบันซึ่งจะปรากฏในfind
คำสั่งโดยค่าเริ่มต้น
for dir in *