Comment déplacer un fichier en mode organisation avec toutes les pièces jointes?

21

J'ai quelques fichiers, par exemple file-1.org, file-2.orgdans le même répertoire partageant le data/répertoire des pièces jointes.

Je voudrais déplacer file-1.orgvers un autre emplacement, créer un nouveau data/répertoire à cet emplacement et déplacer toutes les pièces jointes qui appartiennent au file-1.orgnouveau répertoire. Existe-t-il un moyen automatique de procéder?

abo-abo
la source
1
Cela semble utile, mais ne semble pas exister. L'option la plus simple peut être de déplacer directement les fichiers, puis de les utiliser org-attach-syncpour les synchroniser avec le nouvel élément.
glucas
1
Peut-être que déplacer les fichiers liés n'est pas une si bonne idée. Il se peut que les fichiers du dossier de données soient référencés dans d'autres fichiers org où les liens se rompent si ces fichiers disparaissent. Oh non, il n'y a pas de tels fichiers org ... jusqu'à ce que vous vous rendiez compte des liens rompus dans le cas spécial auquel vous n'aviez jamais pensé auparavant ;-). La copie est peut-être la meilleure alternative. Ou il faut au moins rechercher les cas les plus évidents (par exemple, les fichiers org avec des liens dans le même dossier).
Tobias
1
Les fichiers org sont-ils gérés par un système de contrôle de version, comme git? Lorsque j'ajoute des pièces jointes à un fichier org dans git, les pièces jointes sont automatiquement validées dans le référentiel.
Melioratus
org-lint pourrait aider à trouver des liens cassés
alvaro

Réponses:

1

Cette commande pourrait faire ce que vous voulez:

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

Remplacez-le file-1.orgpar le fichier org dont vous souhaitez déplacer les pièces jointes et ~/temp/my-new-directorypar l'emplacement de votre nouveau répertoire. Un datarépertoire sera créé avec les fichiers joints en eux (si vous souhaitez déplacer au lieu de copier, passez --remove-source-filesà la rsynccommande).

Cela a été testé sur macOS. Vous devrez peut-être omettre l' -Eindicateur sur d'autres plates-formes.

REMARQUE: veuillez le faire sur une copie de vos fichiers . Je ne suis pas un expert en emacs, je n'ai jamais utilisé de pièces jointes en mode org et je n'ai pas l'habitude d'utiliser ce type de manipulation de fichiers hacky. Cela pourrait faire sauter votre dossier en mode org dans l'oubli, sauvegardez-le d'abord.

Marcel Samyn
la source
0

Basé sur la réponse de Marcel Samyn, le script suivant a fonctionné pour moi sous 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 \;

Utilisez le script réduit suivant pour obtenir une liste des fichiers à copier:

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

Sans la ^commande grep, j'ai obtenu des faux positifs des liens de messagerie contenant ": id:".

Michael Strey
la source