Bagaimana cara memindahkan file mode-org bersama dengan semua lampiran?

21

Saya punya beberapa file, misalnya file-1.org, file-2.orgdi direktori yang sama berbagi data/direktori untuk lampiran.

Saya ingin pindah file-1.orgke lokasi yang berbeda, membuat data/direktori baru di lokasi itu dan memindahkan semua lampiran yang menjadi milik file-1.orgdirektori baru. Apakah ada cara otomatis untuk melakukan ini?

abo-abo
sumber
1
Kedengarannya bermanfaat, tetapi sepertinya tidak ada. Opsi paling sederhana adalah memindahkan file secara langsung dan kemudian menggunakannya org-attach-syncuntuk menyinkronkannya dengan item baru.
glukas
1
Mungkin, memindahkan file yang tertaut bukanlah ide yang bagus. Mungkin saja file dalam folder data direferensikan dalam file org lain di mana tautan terputus jika file-file ini hilang. Oh tidak, tidak ada file org seperti itu ... sampai Anda mengetahui adanya tautan rusak dalam kasus khusus yang tidak pernah Anda pikirkan sebelumnya ;-). Mungkin, menyalin adalah alternatif yang lebih baik. Atau setidaknya seseorang harus mencari kasus-kasus yang paling jelas (mis., File org dengan tautan di folder yang sama).
Tobias
1
Apakah file org dikelola oleh sistem kontrol versi, seperti git? Ketika saya menambahkan lampiran ke file org di git, lampiran secara otomatis dikomit ke repositori.
Melioratus
org-lint dapat membantu menemukan tautan yang rusak
alvaro

Jawaban:

1

Perintah ini dapat melakukan apa yang Anda inginkan:

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 \;

Ganti file-1.orgdengan file org yang lampirannya ingin Anda pindahkan, dan ~/temp/my-new-directorydengan lokasi direktori baru Anda. Sebuah datadirektori akan dibuat dengan file attachment di dalamnya (jika Anda ingin pindah bukan copy, lulus --remove-source-filesdengan rsyncperintah).

Ini diuji pada macOS. Anda mungkin harus menghilangkan -Ebendera di platform lain.

CATATAN: Silakan lakukan ini pada salinan file Anda . Saya bukan ahli dalam emacs, tidak pernah menggunakan lampiran mode-org dan saya tidak berpengalaman dengan menggunakan manipulasi file hack semacam ini. Ini bisa membuat folder mode-org Anda terlupakan sehingga cadangkan dulu.

Marcel Samyn
sumber
0

Berdasarkan jawaban Marcel Samyn, skrip berikut bekerja untuk saya di bawah 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 \;

Gunakan skrip tereduksi berikut untuk mendapatkan daftar file yang akan disalin:

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'|' -)).*"

Tanpa ^perintah grep, saya mendapat positif palsu dari tautan email yang berisi ": id:".

Michael Strey
sumber