Wie verschiebe ich eine Datei im Organisationsmodus mit allen Anhängen?

21

Ich habe ein paar Dateien, zB im selben Verzeichnis file-1.org, file-2.orgin dem sich das data/Verzeichnis für Anhänge befindet.

Ich möchte file-1.organ einen anderen Speicherort wechseln , ein neues data/Verzeichnis an diesem Speicherort erstellen und alle Anhänge, die file-1.orgzu dem neuen Verzeichnis gehören, verschieben . Gibt es eine automatische Möglichkeit, dies zu tun?

abo-abo
quelle
1
Das klingt nützlich, scheint aber nicht zu existieren. Die einfachste Möglichkeit besteht darin, die Dateien direkt zu verschieben und sie dann org-attach-syncmit dem neuen Element zu synchronisieren.
Glucas
1
Vielleicht ist das Verschieben der verknüpften Dateien keine so gute Idee. Möglicherweise wird auf die Dateien im Datenordner in anderen Organisationsdateien verwiesen, in denen die Verknüpfungen unterbrochen werden, wenn diese Dateien verschwinden. Oh nein, es gibt keine solchen org-files ... bis Sie auf die defekten Links in dem speziellen Fall aufmerksam werden, an den Sie noch nie gedacht haben ;-). Vielleicht ist das Kopieren die bessere Alternative. Oder man sollte zumindest nach den offensichtlichsten Fällen suchen (z. B. org-Dateien mit Links im selben Ordner).
Tobias
1
Werden die Organisationsdateien von einem Versionskontrollsystem wie git verwaltet? Wenn ich einer Organisationsdatei in git Anhänge hinzufüge, werden diese automatisch in das Repository übernommen.
Melioratus
org-lint kann helfen, defekte Links zu finden
Alvaro

Antworten:

1

Dieser Befehl kann tun, was Sie wollen:

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

Ersetzen Sie sie file-1.orgdurch die Organisationsdatei, deren Anhänge Sie verschieben möchten, und ~/temp/my-new-directorydurch den Speicherort Ihres neuen Verzeichnisses. Es datawird ein Verzeichnis erstellt, in dem sich die angehängten Dateien befinden (wenn Sie sie verschieben möchten, anstatt sie zu kopieren, übergeben Sie sie --remove-source-filesan den rsyncBefehl).

Dies wurde unter macOS getestet. Möglicherweise müssen Sie die Markierung -Eauf anderen Plattformen weglassen .

HINWEIS: Bitte machen Sie dies auf einer Kopie Ihrer Dateien . Ich bin kein Experte für Emacs, habe noch nie Anhänge im Organisationsmodus verwendet und ich habe keine Erfahrung mit dieser Art von Hacky-Manipulation von Dateien. Dies kann dazu führen, dass Ihr Ordner im Organisationsmodus in Vergessenheit gerät. Sichern Sie ihn also zuerst.

Marcel Samyn
quelle
0

Basierend auf der Antwort von Marcel Samyn hat das folgende Skript für mich unter ArchLinux funktioniert:

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

Verwenden Sie das folgende reduzierte Skript, um eine Liste der zu kopierenden Dateien abzurufen:

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

Ohne den ^Befehl in grep habe ich von E-Mail-Links, die ": id:" enthielten, Fehlalarme erhalten.

Michael Strey
quelle