Как переместить файл в режиме org вместе со всеми вложениями?

21

У меня есть несколько файлов, например file-1.org, file-2.orgв том же каталоге, разделяющем data/каталог для вложений.

Я хотел бы переместиться file-1.orgв другое место, создать новый data/каталог в этом месте и переместить все вложения, которые принадлежат file-1.orgэтому новому каталогу. Есть ли автоматический способ сделать это?

Або-або
источник
1
Это звучит полезно, но, кажется, не существует. Простейшим вариантом может быть непосредственное перемещение файлов, а затем их использование org-attach-syncдля синхронизации с новым элементом.
glucas
1
Возможно, перемещение связанных файлов не очень хорошая идея. Может случиться так, что файлы в папке данных упоминаются в других org-файлах, где ссылки прерываются, если эти файлы исчезают. О нет, таких орг-файлов нет ... пока вы не узнаете о неработающих ссылках в особом случае, о котором вы никогда не думали раньше ;-). Возможно, копирование - лучшая альтернатива. Или, по крайней мере, нужно искать наиболее очевидные случаи (например, org-файлы со ссылками в той же папке).
Тобиас
1
Управляются ли файлы org системой контроля версий, например, git? Когда я добавляю вложения в файл org в git, вложения автоматически добавляются в репозиторий.
Мелиоратус
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на файл org, чьи вложения вы хотите переместить, и ~/temp/my-new-directoryна местоположение вашего нового каталога. dataБудет создан каталог с файлами вложения в них (если вы хотите переместить вместо копии, перейти --remove-source-filesк rsyncкоманде).

Это было проверено на macOS. Возможно, вам придется опустить -Eфлаг на других платформах.

ПРИМЕЧАНИЕ. Пожалуйста, сделайте это на копии ваших файлов . Я не специалист по emacs, никогда не использовал вложения в режиме org, и у меня нет опыта использования подобных хакерских манипуляций с файлами. Это может привести к забвению вашей папки в режиме org, поэтому сначала сделайте резервную копию.

Марсель Самын
источник
0

Исходя из ответа Марселя Самына, у меня под 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:».

Майкл Стрей
источник