如何将组织模式文件与所有附件一起移动?


21

我有几个文件,例如file-1.orgfile-2.org在同一目录中共享data/附件目录。

我想移动file-1.org到其他位置,data/在该位置创建一个新目录,然后移动属于file-1.org该新目录的所有附件。有自动的方法吗?


1
听起来很有用,但似乎不存在。最简单的选择可能是直接移动文件,然后org-attach-sync将其与新项目同步。
glucas

1
也许移动链接的文件不是一个好主意。数据文件夹中的文件可能是在其他组织文件中引用的,如果这些文件消失,则链接会断开。哦,不,没有这样的组织文件 ... 直到您意识到以前从未想过的特殊情况下的断开链接 ;-)。也许复制是更好的选择。或者至少应该搜索最明显的情况(例如,在同一文件夹中具有链接的组织文件)。
Tobias

1
org文件是否由git等版本控制系统管理?当我将附件添加到git中的组织文件中时,附件会自动提交到存储库中。
Melioratus 16'Mar

org-lint可能有助于查找断开的链接
alvaro

Answers:


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-filesrsync命令)。

这已在macOS上进行了测试。您可能必须-E在其他平台上省略该标志。

注意: 文件副本上执行此操作。我不是emacs方面的专家,从未使用过组织模式附件,也没有使用这种hacky文件操作的经验。这可能会使您的组织模式文件夹失效,因此请先备份它。


0

根据Marcel Samyn的回答,以下脚本在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:”的电子邮件链接中获得误报。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.