Jak przenieść plik w trybie organizacji razem ze wszystkimi załącznikami?

21

Mam kilka plików, na przykład file-1.org, file-2.orgw tym samym katalogu, udostępniającego data/katalog załączników.

Chciałbym przenieść się file-1.orgdo innej lokalizacji, utworzyć nowy data/katalog w tej lokalizacji i przenieść wszystkie załączniki, które należą do file-1.orgnowego katalogu. Czy jest to automatyczny sposób?

abo-abo
źródło
1
Brzmi to użytecznie, ale wydaje się, że nie istnieje. Najprostszą opcją może być bezpośrednie przeniesienie plików, a następnie użycie ich org-attach-syncdo synchronizacji z nowym elementem.
glucas
1
Być może przeniesienie połączonych plików nie jest tak dobrym pomysłem. Możliwe, że pliki w folderze danych są przywoływane w innych plikach organizacji, w których łącza się psują, jeśli pliki te znikną. O nie, nie ma takich plików org ... dopóki nie dowiesz się o uszkodzonych linkach w specjalnym przypadku, o którym nigdy wcześniej nie myślałeś ;-). Być może kopiowanie jest lepszą alternatywą. Lub przynajmniej należy wyszukać najbardziej oczywiste przypadki (np. Pliki org z linkami w tym samym folderze).
Tobias
1
Czy plikami org zarządza system kontroli wersji, taki jak git? Kiedy dodam załączniki do pliku org w git, załączniki są automatycznie zatwierdzane w repozytorium.
Melioratus
org-lint może pomóc znaleźć niedziałające linki
alvaro

Odpowiedzi:

1

To polecenie może zrobić, co chcesz:

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

Zastąp file-1.orgplik org, którego załączniki chcesz przenieść, i ~/temp/my-new-directorylokalizacją nowego katalogu. dataKatalog zostanie utworzony z plikami załączników w nich (jeśli chcesz przenieść zamiast kopii przejść --remove-source-filesdo rsyncpolecenia).

Zostało to przetestowane na macOS. Być może będziesz musiał pominąć -Eflagę na innych platformach.

UWAGA: Należy to zrobić na kopię swoich plików . Nie jestem ekspertem od emacsa, nigdy nie korzystałem z załączników w trybie org i nie mam doświadczenia w używaniu tego rodzaju zhackowanych operacji na plikach. Może to zniszczyć folder trybu org w zapomnienie, więc najpierw wykonaj kopię zapasową.

Marcel Samyn
źródło
0

W oparciu o odpowiedź Marcela Samyna, następujący skrypt działał dla mnie w 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 \;

Użyj następującego skróconego skryptu, aby uzyskać listę plików do skopiowania:

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

Bez ^polecenia grep otrzymałem fałszywe alarmy z linków e-mail zawierających „: id:”.

Michael Strey
źródło