¿Cómo mover un archivo de modo org junto con todos los archivos adjuntos?

21

Tengo un par de archivos, por ejemplo file-1.org, file-2.orgen el mismo directorio que comparte el data/directorio de archivos adjuntos.

Me gustaría moverme file-1.orga una ubicación diferente, crear un nuevo data/directorio en esa ubicación y mover todos los archivos adjuntos que pertenecen al file-1.orgnuevo directorio. ¿Hay una forma automática de hacer esto?

abo-abo
fuente
1
Eso suena útil, pero no parece existir. La opción más simple puede ser mover los archivos directamente y luego usarlos org-attach-syncpara sincronizarlos con el nuevo elemento.
glucas
1
Tal vez, mover los archivos vinculados no es una buena idea. Es posible que los archivos en la carpeta de datos estén referenciados en otros archivos de organización donde los enlaces se rompen si estos archivos desaparecen. Oh no, no hay tales archivos de organización ... hasta que te des cuenta de los enlaces rotos en el caso especial en el que nunca pensaste antes ;-). Tal vez, copiar es la mejor alternativa. O al menos uno debería buscar los casos más obvios (por ejemplo, archivos de organización con enlaces en la misma carpeta).
Tobias
1
¿Los archivos de la organización son administrados por un sistema de control de versiones, como git? Cuando agrego archivos adjuntos a un archivo de organización en git, los archivos adjuntos se confirman automáticamente en el repositorio.
Melioratus
org-lint puede ayudar a encontrar enlaces rotos
alvaro

Respuestas:

1

Este comando podría hacer lo que quieras:

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

Reemplace file-1.orgcon el archivo de organización cuyos archivos adjuntos desea mover, y ~/temp/my-new-directorycon la ubicación de su nuevo directorio. Se datacreará un directorio con los archivos adjuntos en ellos (si desea mover en lugar de copiar, pase --remove-source-filesal rsynccomando).

Esto fue probado en macOS. Es posible que deba omitir la -Ebandera en otras plataformas.

NOTA: Haga esto en una copia de sus archivos . No soy un experto en emacs, nunca he usado archivos adjuntos en modo org y no tengo experiencia en el uso de este tipo de manipulación de archivos hacky. Esto podría hacer que su carpeta del modo org quede en el olvido, así que primero haga una copia de seguridad.

Marcel Samyn
fuente
0

Según la respuesta de Marcel Samyn, el siguiente script funcionó para mí en 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 \;

Use el siguiente script reducido para obtener una lista de los archivos que se copiarán:

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

Sin el ^comando en el grep, obtuve falsos positivos de los enlaces de correo electrónico que contienen ": id:".

Michael Strey
fuente