Um arquivo deve aparecer em várias pastas

4

Eu tenho mais de 50 pastas, cada uma contendo uma grande quantidade de dados que precisam ser processados. Todos eles são processados usando exatamente o mesmo código, utilizando os.path.dirname (os.path.realpath ( file )) para obter o diretório no qual o script python está localizado, para que não haja manual edição necessária pelo usuário, basta clicar duas vezes.

Eu preciso que o script apareça em cada pasta enquanto, na verdade, só esteja em um lugar, para que eu possa editá-lo uma vez e, quando for executado em qualquer um desses locais, o caminho da pasta esteja correto. A alternativa é editar o master e depois colar uma pasta de cada vez em todas as pastas + 50 sempre que eu atualizar o código, o que é muito tedioso e propenso a erros. No Linux eu poderia configurar isso com um link simbólico, mas não consigo descobrir como fazer isso no Windows.

Como alternativa, uma maneira de colar o arquivo em todos os diretórios de destino de uma só vez, em vez de um por vez, atingiria o mesmo objetivo.

    
por Elliot 17.02.2015 / 23:02

2 respostas

13

Você precisa de um link simbólico ou link físico.

Links simbólicos (ou links simbólicos para breve) são bem parecidos com os atalhos: há um arquivo real e várias referências (links simbólicos) nele. Eles até têm aquele pequeno ícone de flecha neles. Ao contrário dos atalhos, os links simbólicos podem ter qualquer extensão.

Links físicos vinculam arquivos em um disco rígido a um local na árvore de diretórios. Cada arquivo tem pelo menos um link físico, caso contrário não existiria em nenhum diretório. Se um arquivo tiver vários links físicos, o original não poderá ser distinguido e o arquivo existirá fisicamente em apenas um local.

Ambos têm suas limitações:

  • Alguns softwares não funcionam bem com links simbólicos
  • A exclusão do arquivo original deixa todos os links simbólicos quebrados
  • Você não pode vincular pastas (mas pode criar uma junção de diretório se o symlink não for suficiente)
  • A criação de links físicos de partição cruzada é impossível

Links simbólicos são geralmente suficientes.

Para criar um link simbólico ou um link físico:

  1. Inicie a linha de comando privilegiada: pressione Win , digite cmd , pressione Ctrl + Deslocamento + Enter
  2. Emitir o comando mklink :

    • mklink link_name link_target para link simbólico de arquivo
    • mklink /d link_name link_target para o link simbólico da pasta
    • mklink /h link_name link_target para link físico de arquivo
    • mklink /j link_name link_target para junção de diretório
por 17.02.2015 / 23:27
1

No Windows Vista e mais recentes, você pode criar links sym ou hard links, que se comportam como você esperaria no Linux. Você pode criar um link físico ou sym usando o comando MKLINK criado no Windows Visa e mais recente. (Fazer links sym exigem privilégios de administrador.)

Ou, para a alternativa que você mencionou, se as pastas forem simplesmente as subpastas imediatas da pasta em que o script reside, você poderá fazer no prompt de comando na pasta do script:

for /d %D in (*) do (copy /y "myscript.py" "%D")

para atualizá-los de uma só vez. Se estiver escrevendo este comando em lote, você precisará usar o seguinte código:

for /d %%D in (*) do (copy /y "myscript.py" "%%D")
    
por 17.02.2015 / 23:31