ใช้ `ln 'เพื่อสร้างไดเรกทอรีที่ขาดหายไป


10

ดังนั้นฉันจึงเขียนผู้จัดการแพ็คเกจเล็ก ๆ และปัญหาที่ฉันพบก็คือการสร้างลิงก์สัญลักษณ์ไปยังไฟล์

มันติดตั้งแพคเกจ/usr/pkg/name-versionและจากนั้นอ่านไฟล์เพื่อตรวจสอบการเชื่อมโยงสัญลักษณ์ที่จะทำ ฉันใช้lnเพื่อสร้างลิงก์และฉันพบปัญหาเมื่อพยายามติดตั้งส่วนหัว Linux API ฉันจำเป็นต้องเชื่อมโยงไฟล์ส่วนหัวด้วยตัวเองไม่ใช่โฟลเดอร์ที่มีพวกเขา (ดังนั้นหาก 2 แพ็คเกจจำเป็นต้องวางไฟล์ในไดเรกทอรีย่อยเดียวกันของไฟล์รวมพวกเขาสามารถทำได้โดยไม่ต้องขันหนึ่งแพ็คเกจขึ้นไป)

ปัญหานั้นฉันแก้ไข แต่lnข้อผิดพลาดเพียงถ้าเส้นทางไม่สมบูรณ์ซึ่งน่ารำคาญเพราะไดเรกทอรีเหล่านั้นไม่ควรอยู่จนกว่าจะมีการติดตั้งแพคเกจ

มีการตั้งค่าสถานะสำหรับlnที่จะสร้างไดเรกทอรีใด ๆ ที่ขาดหายไปหรือฉันจะต้องไปกับสคริปต์ทุบตีซับซ้อน


1
ฉันอาจจะพลาดอะไรบางอย่างที่ชัดเจน แต่ทำไมคุณไม่ใช้mkdir... สร้างไดเรกทอรี?
jw013

lndirนอกจากนี้คุณยังอาจต้องการตรวจสอบ
ams

คำตอบ:


3

คุณไม่จำเป็นต้องมีสคริปต์ทุบตีที่ซับซ้อน แต่ใช้งานง่าย mkdir --parentsจะดูแลทุกอย่างไม่แม้แต่พิมพ์ข้อผิดพลาดหากมีโครงสร้างไดเรกทอรีอยู่แล้ว

เพียงระมัดระวังวิธีที่คุณจัดการกับไดเรกทอรีเหล่านี้ในการลบดังนั้นคุณจึงไม่ทำลายแพ็คเกจอื่น ๆ

นอกจากนี้เมื่อคุณกำลังเขียนbashคุณสามารถดูเวทมนตร์ (ปลั๊กไร้ยางอาย) บางทีมันอาจจะง่ายกว่าที่จะดัดแปลงมันเนื่องจากมันมีอายุและยืดหยุ่น


ว้าวฉันลืมที่จะพูดถึงว่าฉันเขียนมันใน c ++ และเชื่อมต่อ bash กับการเรียกของระบบ () เพราะง่ายกว่า นี่คือสิ่งที่ฉันทำลงไปขอบคุณ
Chris

@ Chris: ไม่ได้ง่ายขึ้นมันเป็นเรื่องยากมากที่จะหลบหนีอาร์กิวเมนต์บรรทัดคำสั่งอย่างถูกต้องกับsystem() system()อย่างน้อยที่สุดคุณควรใช้posix_spawn()หรือfork()+exec*()ยอมรับอาร์กิวเมนต์บรรทัดคำสั่งเป็นอาร์เรย์
Lie Ryan

4

lnมีธงที่จะทำเช่นนี้กับไม่มี การสร้างไดเรกทอรีไม่ใช่งานของมัน

mkdir -p foo/bar/quxจะสร้างfoo, foo/barและfoo/bar/quxตามความจำเป็น ดังนั้นเรียกmkdir -pทั้งหมด แต่ส่วนประกอบเส้นทางสุดท้ายก่อน

ดูเหมือนว่าคุณกำลังสร้าง reinventing wheel Stowซึ่งเป็นตัวจัดการแพ็กเกจอย่างง่ายที่ผสานลำดับชั้นของไดเรกทอรีโดยการสร้างไดเรกทอรีให้มีความลึกที่ต้องการพร้อมลิงก์สัญลักษณ์ไปยังส่วนประกอบของแพ็คเกจต่างๆ หรือบางทีXStowซึ่งเป็นเหมือน Stow แต่มีความเป็นไปได้ในการปรับแต่งเพิ่มเติม


0

อาจtarช่วยเตรียมไฟล์ด้วยลิงค์:

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

จากนั้นสร้างลิงก์ที่ต้องการ:

tar xvf links.tar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.