Presumo que manter uma cópia de todos os arquivos em seu laptop não é uma opção. Caso contrário, seria muito mais fácil.
A ferramenta certa aqui é uma ferramenta de controle de versão. Mas percebo que, a menos que todos os usuários tenham uma quantidade mínima de sofisticação técnica, fazê-los usar ferramentas de controle de versão não é uma sugestão realista. E mesmo assim você teria que escolher com cuidado o que verificaria no seu laptop.
Você ainda pode usar o controle de versão. Na máquina compartilhada, verifique todos os seus arquivos e deixe os arquivos de outras pessoas em paz. Mantenha um checkout separado no seu laptop. Confirmar e verificar sempre que você trocar de máquina. Quanto mais eu penso sobre isso, mais eu gosto desta opção: não requer nenhum código ou mesmo qualquer script frágil.
Você faz a sincronização bidirecional. O rsync não é bom nisso: se você esquecer de executá-lo ou acidentalmente executá-lo na direção errada, provavelmente perderá o trabalho sem aviso. Unison é uma boa ferramenta para sincronização bidirecional: sempre sincroniza bidirecionalmente , e reclama se um arquivo foi alterado nos dois lados. É de código aberto e está bem integrado nas plataformas unix e Windows.
Infelizmente, o uníssono não tem a opção de ignorar arquivos pelo proprietário, mais do que o rsync faz. Você pode gerar uma lista de ignorados com find -user
, mas fica confuso, e há uma condição de corrida se alguém adicionar ou excluir arquivos entre a execução de find
e a execução de unison
ou rsync
.
Você pode corrigir o rsync ou o uníssono para adicionar a opção de ignorar arquivos com base em seus metadados. Acabei de dar uma rápida olhada na fonte e, em ambos os casos, o código de exclusão está strongmente vinculado a cadeias, não a entradas de diretório. Parece factível, mas não é um patch trivial.
Você pode criar uma visualização do sistema de arquivos que contém apenas seus arquivos. Não tenho uma solução completa e perfeita, mas aqui estão algumas ideias para começar.
-
Se a máquina compartilhada suportar hard links (todos os unices fazem, e o Windows faz desde o NT4, desde que você use NTFS), é fácil criar uma cópia do repositório contendo apenas hard links de seus arquivos:
cd /shared/repository find . -user "$USER" -exec sh -c 'mkdir -p "/my/view/${0%/*}" && ln "$0" "/my/view/$0"' {} \;
ou com zsh:
autoload zmv zmv -L -Q '/shared/repository/(**/)(*)(u$UID)' "/my/view/$1$2"
Você precisa ter cuidado para não violar links físicos durante a edição ou a sincronização. Eu não sei como rsync e unison lidariam. Após a criação inicial, um arquivo no repositório compartilhado pertencente a você e com uma contagem de links de 1 deve ser excluído e um arquivo em sua visualização com uma contagem de links de 1 deve ser vinculado no repositório compartilhado. Isso tudo é bastante desajeitado, e eu gostaria de receber sugestões para melhorias.
-
Se a máquina compartilhada suportar FUSE , você poderá usá-la para criar uma exibição ao vivo do repositório compartilhado contendo apenas arquivos. Eu não sei de nenhum sistema de arquivos FUSE existente que possa fazer isso, mas bindfs chega perto (eu não olhei para o código para avaliar a dificuldade de codificação).
-
Você pode usar
LD_PRELOAD
para substituirreaddir
(ou um equivalente no Windows) ao executar o rsync ou unison, para que ele retorne apenas os arquivos de sua propriedade.