ฉันสงสัยว่าฉันจะเชื่อมโยงไฟล์ทั้งหมดในโครงสร้าง dir ได้อย่างไรและจากนั้นก็คัดลอกไฟล์ของส่วนขยายที่แน่นอนใน dir นั้น ฉันกำลังเชื่อมโยงไฟล์ทั้งหมดภายใน / foo / a, b, c ถึง / bar / a, b, c แล้วคัดลอกไฟล์บางไฟล์ที่มีนามสกุลบางอย่าง
ฉันสงสัยว่าฉันจะเชื่อมโยงไฟล์ทั้งหมดในโครงสร้าง dir ได้อย่างไรและจากนั้นก็คัดลอกไฟล์ของส่วนขยายที่แน่นอนใน dir นั้น ฉันกำลังเชื่อมโยงไฟล์ทั้งหมดภายใน / foo / a, b, c ถึง / bar / a, b, c แล้วคัดลอกไฟล์บางไฟล์ที่มีนามสกุลบางอย่าง
คำตอบ:
จากไดเร็กทอรี / bar เพื่อสร้าง symlink ทั้งหมดสำหรับทุกอย่างยกเว้นส่วนขยายเหล่านี้
find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \;
แล้วคัดลอกส่วนขยายทั้งหมดคำสั่งเดียวกันส่วนใหญ่
find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \;
แก้ไข : คัดลอกโครงสร้างไดเรกทอรีทั้งหมดเชื่อมโยงไฟล์บางไฟล์คัดลอกไฟล์อื่น ๆ ไม่แน่ใจว่าสิ่งนี้เป็นไปได้ในตอนแรกด้วยคำสั่งเดียว แต่เพิ่งเรียนรู้เทคนิคที่มีประโยชน์อื่น ๆ พร้อมค้นหา
find foo/ -type d -printf "mkdir -vp 'bar/%p'\n" -o -type f ! -name "*.txt" ! -name "*.baz" -printf "ln -vs '../%p' 'bar/%p'\n" -o -type f \( -name "*.txt" -o -name "*.baz" \) -printf "cp -v %p bar/%p\n" | sh
mv bar/foo/* bar/ && rm -R bar/foo/
สิ่งสำคัญที่ควรทราบคือเมื่อสร้างลิงก์สัญลักษณ์ที่คุณให้เส้นทางจริงลิงก์จะใช้เพื่อเกี่ยวข้องกับ foo / ตัวอย่างของฉันแสดงลิงก์สัมพัทธ์เมื่อพวกเขาอยู่เคียงข้างกัน (สามารถสร้างลิงก์สัญลักษณ์แบบสัมบูรณ์ได้เช่นกัน)