วิธีค้นหารหัส C ที่หายไป


9

ฉันสืบทอดระบบการพัฒนาแบบดั้งเดิมซึ่งมีเอกสารไม่ดีและไม่ทราบว่าซอร์สโค้ดยังมีอยู่

ตอนนี้ฉันสามารถค้นหาซอร์สโค้ดและสร้างส่วนหนึ่งของระบบได้จริง

ฉันสงสัยว่าฉันสามารถค้นหาซอร์สโค้ดที่เหลือหรือไม่และมีวิธีใดที่ดีกว่าlocate *.cและตรวจสอบไฟล์ด้วยตนเอง (นั่นคือวิธีที่ฉันพบส่วนหนึ่งของโค้ด)

มี 3 เครื่องและมีเพียงหนึ่งเดียวเท่านั้นที่ฉันพบซอร์สโค้ดที่น่าจะเป็นเครื่องพัฒนา นอกจากนี้ยังมี.debคลังเก็บ61 ฉบับซึ่งดูเหมือนว่าเป็นโครงการที่จัดทำแพคเกจ แต่การดู.debเอกสารสำคัญแสดงให้เห็นว่าแหล่งที่มานั้นไม่ได้อยู่ในคลังเก็บหรืออย่างน้อยก็ไม่ใช่ที่ที่ฉันดู

มีวิธีที่ดีในการ "สแกน" ไดรฟ์ทั้งหมดสำหรับซอร์สโค้ดหรือไม่

คำตอบ:


9

สิ่งนี้จะไม่ตอบคำถามทั่วไปของคุณ แต่ในกรณีเฉพาะของคุณเนื่องจากคุณมีแพ็คเกจในระบบจึงควรมองหาซอร์สโค้ดที่เกี่ยวข้อง:

find / -name \*.orig.tar\* -o -name \*.dsc

สิ่งนี้จะค้นหาไฟล์เก็บถาวรซอร์สที่ตั้งชื่อตามวิธีการสร้างเครื่องมือสร้างแพ็กเกจ Debian และไฟล์ควบคุมแพ็กเกจซอร์ส หากคุณพบไฟล์เหล่านั้นให้ค้นหา.debian.tar*หรือค้นหา.diff.gzไฟล์ที่อยู่ด้านข้าง ไฟล์ทั้งหมดเหล่านี้รวมกันจะให้รหัสแหล่งที่มาและกฎการสร้างพร้อมกับข้อมูลเมตาแพคเกจทั้งหมด

คุณสามารถค้นหาไฟล์ควบคุมที่คลายการแพคแล้ว:

find / -name control

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


1
ยัง: find / -wholename '*/debian/rules'. หรือ (เร็วกว่าถ้า mlocate มีการติดตั้ง)locate -r /debian/rules$
CAS

2
@cas ฉันพยายามเล่นอย่างปลอดภัยที่นี่ฉันเห็นการตั้งค่าแปลก ๆ บางอย่างสำหรับการสร้างแพ็คเกจ Debian locateจะเร็วขึ้น แต่ฉันผิดหวังในอดีตที่ใช้ระบบที่กู้คืนมาซึ่งถูกล้างข้อมูลออก - locateฐานข้อมูลยังใหม่เกี่ยวกับซอร์สโค้ดที่หายไป (นั่นยังคงเป็นข้อมูลที่มีประโยชน์หากมีการสำรองข้อมูล ... )
Stephen Kitt

1
ดำเนินการโดยunix.stackexchange.com/questions/382857สิ่งเหล่านี้ไม่ใช่แพ็คเกจของเดเบียน
JdeBP

1
@JdeBP ฉันไปโดย“ มันมี.debคลังจดหมาย 61 ฉบับที่ดูเหมือนว่าจะเป็นเวอร์ชันของแพ็คเกจโครงการ” (sic)
สตีเฟ่น Kitt

2
@DjDac นั้นเป็นเรื่องดีเพียงแค่findพยายามอ่านไฟล์/procที่หายไประหว่างเวลาที่findสร้างรายการไฟล์และเวลาที่อ่าน คุณสามารถข้ามได้/procทั้งหมด
สตีเฟ่น Kitt

1

ฉันมักจะใช้การรวมกันของสคริปต์ในการทำงานกับไฟล์ต้นฉบับ เช่นเดียวกับคำตอบข้างต้นสิ่งนี้จะไม่แก้ไขกรณีของคุณอย่างแน่นอน แต่การค้นหาสัญลักษณ์สามารถช่วยในการค้นหาไฟล์ต้นฉบับ

เพิ่มต่อไปนี้ในbashrc:

function list-code-files() {
    find -type f \( \
        -name '*.cpp' -o \
        -name '*.java' -o \
        -name '*.php' -o \
        -name '*.[chS]' -o \
        -name 'Makefile' -o \
        -name '*.mk' \
        \) -print0
}

function csym() {
    list-code-files | xargs -0 grep -ne "$1"
}

จากนั้นฉันสามารถแสดงรายการไฟล์ต้นฉบับโดยใช้list-code-files | xargs -0 echoหรือค้นหาสัญลักษณ์โดยใช้csym some-symbol-regexeg

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