Como mover um arquivo de modo organizacional junto com todos os anexos?


21

Eu tenho alguns arquivos, por exemplo file-1.org, file-2.orgno mesmo diretório que compartilha o data/diretório para anexos.

Eu gostaria de mudar file-1.orgpara um local diferente, criar um novo data/diretório nesse local e mover todos os anexos que pertencem ao file-1.orgnovo diretório. Existe uma maneira automática de fazer isso?


1
Isso parece útil, mas parece não existir. A opção mais simples pode ser mover os arquivos diretamente e usá org-attach-sync-los para sincronizá-los com o novo item.
glucas

1
Talvez, mover os arquivos vinculados não seja uma boa idéia. Pode ser que os arquivos na pasta de dados sejam referenciados em outros arquivos organizacionais em que os links quebram se esses arquivos desaparecerem. Ah, não, não existem esses arquivos organizacionais ... até você se conscientizar dos links quebrados no caso especial em que nunca pensou antes ;-). Talvez copiar seja a melhor alternativa. Ou deve-se procurar pelo menos os casos mais óbvios (por exemplo, arquivos org com links na mesma pasta).
Tobias

1
Os arquivos organizacionais são gerenciados por um sistema de controle de versão, como o git? Quando adiciono anexos a um arquivo organizacional no git, os anexos são automaticamente confirmados no repositório.
Melioratus 10/03

O org-lint pode ajudar a encontrar links quebrados
alvaro

Respostas:


1

Este comando pode fazer o que você deseja:

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

Substitua file-1.orgpelo arquivo organizacional cujos anexos você deseja mover e ~/temp/my-new-directorypelo local do seu novo diretório. Um datadiretório será criado com os arquivos de anexo (se você deseja mover em vez de copiar, passe --remove-source-filespara o rsynccomando).

Isso foi testado no macOS. Talvez você precise omitir a -Ebandeira em outras plataformas.

NOTA: Faça isso em uma cópia dos seus arquivos . Não sou especialista em emacs, nunca usei anexos no modo organizacional e não tenho experiência com esse tipo de manipulação de arquivos hacky. Isso pode explodir sua pasta de modo organizacional no esquecimento, então faça o backup primeiro.


0

Com base na resposta de Marcel Samyn, o seguinte script funcionou para mim no 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 o seguinte script reduzido para obter uma lista de arquivos a serem copiados:

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

Sem o ^comando grep, obtive falsos positivos a partir de links de email contendo ": id:".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.