จะย้ายไฟล์โหมด org พร้อมกับไฟล์แนบทั้งหมดได้อย่างไร


21

ฉันมีไฟล์คู่เช่นfile-1.org, file-2.orgในไดเรกทอรีเดียวกันร่วมกันdata/ไดเรกทอรีสำหรับสิ่งที่แนบ

ฉันต้องการย้ายfile-1.orgไปยังตำแหน่งอื่นสร้างdata/ไดเรกทอรีใหม่ในตำแหน่งนั้นและย้ายไฟล์แนบทั้งหมดที่เป็นของfile-1.orgไดเรกทอรีใหม่ มีวิธีอัตโนมัติในการทำเช่นนี้หรือไม่?


1
ฟังดูมีประโยชน์ แต่ดูเหมือนไม่มีอยู่จริง ตัวเลือกที่ง่ายที่สุดคือการย้ายไฟล์โดยตรงจากนั้นใช้org-attach-syncเพื่อซิงค์ไฟล์กับรายการใหม่
ลูกัส

1
บางทีการย้ายไฟล์ที่ลิงก์ไม่ใช่ความคิดที่ดี อาจเป็นไปได้ว่าไฟล์ในโฟลเดอร์ข้อมูลถูกอ้างอิงในไฟล์ org อื่น ๆ ที่ลิงก์แตกหากไฟล์เหล่านี้หายไป โอ้ไม่ไม่มีไฟล์ org ดังกล่าว ... จนกว่าคุณจะทราบลิงก์ที่เสียหายในกรณีพิเศษที่คุณไม่เคยคิดถึงมาก่อน ;-) บางทีการคัดลอกเป็นทางเลือกที่ดีกว่า หรืออย่างน้อยก็ควรค้นหากรณีที่ชัดเจนที่สุด (เช่นไฟล์ org พร้อมลิงก์ในโฟลเดอร์เดียวกัน)
Tobias

1
ไฟล์ org ถูกจัดการโดยระบบควบคุมเวอร์ชันเช่น git หรือไม่? เมื่อฉันเพิ่มสิ่งที่แนบไปยังไฟล์ org ในคอมไพล์สิ่งที่แนบมาจะถูกส่งไปยังที่เก็บโดยอัตโนมัติ
Melioratus

ผ้าสำลี org-lint อาจช่วยค้นหาลิงค์ที่เสียหาย
alvaro

คำตอบ:


1

คำสั่งนี้สามารถทำสิ่งที่คุณต้องการ:

find -E data -type f -iregex ".*($(cat file-1.org | grep -i ':id:' | perl -pe 's/^\s*:id:\s*(\w{2})([\w-]+)$/$1\\\/$2/i' | paste -s -d'|' -)).*" -exec rsync -R '{}' ~/temp/my-new-directory \;

แทนที่file-1.orgด้วยไฟล์องค์กรที่มีไฟล์แนบที่คุณต้องการย้ายและ~/temp/my-new-directoryเป็นที่ตั้งของไดเรกทอรีใหม่ของคุณ dataไดเรกทอรีจะถูกสร้างขึ้นด้วยไฟล์ที่แนบมาในพวกเขา (ถ้าคุณต้องการที่จะย้ายแทนการคัดลอกผ่าน--remove-source-filesไปยังrsyncคำสั่ง)

สิ่งนี้ได้รับการทดสอบบน macOS คุณอาจต้องข้ามการ-Eตั้งค่าสถานะบนแพลตฟอร์มอื่น ๆ

หมายเหตุ: โปรดทำเช่นนี้เป็นสำเนาของไฟล์ของคุณ ฉันไม่ใช่ผู้เชี่ยวชาญใน emacs ไม่เคยใช้สิ่งที่แนบมาในโหมด org และฉันไม่เคยมีประสบการณ์กับการใช้การจัดการไฟล์แฮ็คชนิดนี้ การทำเช่นนี้อาจทำให้โฟลเดอร์โหมดองค์กรของคุณหายไปดังนั้นควรสำรองข้อมูลไว้ก่อน


0

จากคำตอบของ Marcel Samyn สคริปต์ต่อไปนี้ใช้ได้กับฉันภายใต้ ArchLinux:

find data -regextype awk -type f -iregex ".*($(cat file-1.org | grep -i '^:id:' | perl -pe 's/^\s*:id:\s*(\w{2})([\w-]+)$/$1\/$2/i' | paste -s -d'|' -)).*"  -exec rsync -R '{}' ~/temp/my-new-directory \;

ใช้สคริปต์ลดต่อไปนี้เพื่อรับรายการไฟล์ที่จะคัดลอก:

find data -regextype awk -type f -iregex ".*($(cat file-1.org | grep -i '^:id:' | perl -pe 's/^\s*:id:\s*(\w{2})([\w-]+)$/$1\/$2/i' | paste -s -d'|' -)).*"

หากไม่มี^คำสั่ง in grep ฉันจะได้รับผลบวกปลอมจากลิงก์อีเมลที่มี ": id:"

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