Muitas ferramentas disponíveis para sincronizar arquivos não são adequadas para sincronizar seu diretório inicial. Por isso, e para aprender Ruby, tenho trabalhado em minha própria ferramenta de sincronização.
Um problema que encontrei, que acho que está nas minhas ferramentas de sincronização, é o que acontece quando o usuário renomeia um arquivo ou exclui um arquivo. Só de pensar no primeiro caso (se o usuário o renomear), existe uma maneira de saber que este não é um arquivo novo, mas um arquivo que foi renomeado? Talvez um ID exclusivo do arquivo que eu não conheço. Descritores de arquivos parecem algo a ser examinado, mas tenho certeza de que é um conceito diferente.
Responder1
Não há como saber com certeza se um arquivo foi renomeado.
Quando um arquivo é renomeado, seuinodenúmero não muda. (Isso pode não ser verdade para sistemas de arquivos “exóticos”, como sistemas de arquivos de rede, mas é verdade para todos os sistemas de arquivos Unix “nativos”.) No entanto, o inverso não é verdade: se um arquivo for excluído, um novo arquivo poderá ser criado com o mesmo número de inode. Portanto, mesmo que você veja que um arquivo tem o mesmo número de inode que outro arquivo tinha antes, isso não significa necessariamente que o arquivo foi renomeado.
O número do inode identifica exclusivamente o arquivoenquanto existir. Isso o torna adequado para detectar links físicos, mas não para detectar renomeações.
Os descritores de arquivo estão associados a um processo específico e são inúteis aqui.
Você pode considerar uma heurística de que se um arquivo tiver o mesmo tamanho, hora de modificação e número de inode de antes, mas com um nome diferente, isso significa que ele foi renomeado. Essa heurística é semelhante ao que muitas ferramentas de sincronização fazem para detectar arquivos inalterados: mesmo nome, tamanho e hora da modificação.
Todas as ferramentas que consigo pensar para renomear o arquivo de trilha fazem isso com base no conteúdo do arquivo.Uníssonodetecta arquivos renomeadosse pelo menos um dos endpoints for remoto. Alguns sistemas modernos de controle de versão, como o git, também detectam arquivos renomeados.
Eu suspeito fortemente que tudo o que você deseja fazer com a sincronização de arquivos, entresincronizar novamente,Uníssonoe controle de versão, ele já existe.
Responder2
Os descritores de arquivo são criados para um programa quando ele abre um arquivo e só são válidos até que o programa o feche novamente. Então, como você suspeitava: um conceito diferente.
Se o arquivo foi renomeado, o (s) inode (s) não mudará (s), você pode usá-lo, mas, a menos que as renomeações aconteçam com frequência, duvido que valha a pena.