Як перемістити файл в режимі org разом із усіма вкладеннями?


21

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

Я хотів би переїхати file-1.orgв інше місце, створити новий data/каталог у цьому місці та перемістити всі вкладення, що належать до file-1.orgнового каталогу. Чи існує автоматичний спосіб зробити це?


1
Це звучить корисно, але, здається, не існує. Найпростішим варіантом може бути переміщення файлів безпосередньо, а потім їх використання org-attach-syncдля синхронізації з новим елементом.
глюкас

1
Можливо, переміщення зв'язаних файлів - не така гарна ідея. Можливо, на файли в папці даних посилаються в інших org-файлах, де посилання розриваються, якщо ці файли зникають. О ні, немає таких 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, ніколи не використовував вкладені файли в органічному режимі, і не маю досвіду використання подібних маніпуляцій з хакі-файлами. Це може підірвати вашу папку в органічному режимі на забуття, тому спершу створіть її назад.


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

Без ^команди grep я отримав помилкові позитиви з посилань електронної пошти, що містять ": id:".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.