Como copiar pastas na mesma unidade NTFS usando hardlinks?

Como copiar pastas na mesma unidade NTFS usando hardlinks?

Existe uma maneira de criar hardlinks para criar uma duplicata de uma pasta na MESMA unidade (formatada em NTFS)? Estou tentando fazer algo assim: XCOPY E:\TEMP\SAMPLE1* E:\TEMP\SAMPLE2\ /s mas EM VEZ de copiar os arquivos e usar o espaço extra na unidade, basta criar hardlinks para os arquivos.

Objetivo: existem apenas alguns arquivos que não precisamos na pasta SAMPLE2, mas queremos manter todos eles em SAMPLE1. A pasta SAMPLE2 será eventualmente copiada para outra unidade.

NOTA: o conteúdo total do SAMPLE1 é de cerca de 400 GB (com várias subpastas contidas nele) e cada um dos arquivos que vamos excluir do SAMPLE2 tem cerca de 20-40 MB cada (há muitos mais de 100 arquivos, localizados em vários subpastas).

Então, existe uma maneira de fazer o equivalente ao XCOPY (comando acima), exceto usar hardlinks, e então removemos todos os arquivos que não queremos no SAMPLE2 antes de copiá-los para a unidade externa; em seguida, excluindo a pasta SAMPLE2.

Responder1

É um pouco complicado, mas:

  1. Faça uma cópia completa regular com a GUI. Copie/cole etc. Observe o espaço em disco desaparecer.
  2. Execute o DupeGuru com a fonte definida como referência e o dupe como "normal"
  3. Quando o relatório estiver concluído faça "selecionar tudo> excluir" e marque a opção "recriar como links físicos". Também pode fazer links simbólicos. Você deve recuperar algum espaço em disco. Eu uso isso às vezes para preparar uma pasta para upload depois de excluir muitos outros arquivos da estrutura com um script.

BÔNUS: funciona em Mac, Windows e Linux. Legal!https://dupeguru.voltaicideas.net/ insira a descrição da imagem aqui

Responder2

Não é necessário software de terceiros. Isto pode ser conseguido comPowerShell. Aqui está uma função habilitada para pipeline que usa um caminho de origem ($Path) e um caminho "espelho" ($MirrorPath). Ele preenche o caminho do espelho com links físicos para arquivos no caminho de origem e subpastas para corresponder às subpastas de origem, que também são preenchidas recursivamente.

Function Mirror-Path {
  Param(
    [Parameter(Mandatory,ValueFromPipeline,Position=0)]
    [String[]]
    $Path,
    [Parameter(Mandatory,Position=1)]
    [String]
    $MirrorPath
  )
  Begin{
    If ( ! ( Test-Path $MirrorPath )) {
        mkdir $MirrorPath -Force | out-null
    }
  }
  Process{ 
    ForEach ( $Target in $Path ) {
        If ( Test-Path $Target ) {
            Resolve-Path $Target | gci -File | ForEach {
                New-item -ItemType Hardlink -Path $MirrorPath -Name $_.Name -Target $_.FullName | out-null
            }
            Resolve-Path $Target | gci -Directory | ForEach {
                Mirror-Path $_.FullName ( Join-Path $MirrorPath $_.Name )
            }
        }
        Else {
            Echo "'$Target' is not a valid path."
        }
    }
  }
  End {}
}

Responder3

Isto é simples em teoria. Você precisa criar um link simbólico do(s) diretório(s) que fará EXATAMENTE o que você deseja. Ele copia atalhos que parecem e agem como arquivos reais para o usuário e os programas. Em seguida, você pode excluir os links simbólicos que não deseja, o que apenas exclui os links; então você copia o resto dos "arquivos" (na verdade links) normalmente e ele copiará os arquivos reais.

Mas o Windows é baseado em GUI e não existe uma solução GUI integrada para criar links simbólicos. Além disso, o prompt de comando também dificultou. (Se você estiver usando Linux, é fácil e direto através do terminal, e alguns gerenciadores de arquivos gráficos como o GNOME Commander também facilitam a interface gráfica.)

Entããão.. para executar a solução acima, a maneira "fácil" é baixar um plugin e um arquivo de suporte (se necessário; leia as notas de download)aqui Isso adicionará opções de links simbólicos ao menu do botão direito. Os que você deseja são "Pick Link Source" para 'copiar' o diretório e depois "Drop As > Hardlink Clone" para colar. Trabalhe no diretório vinculado conforme desejar, excluindo arquivos (links) e outros. Em seguida, copie e cole normalmente (NÃO escolha o link e solte como) para onde quiser e Voila, atalhos copiados como arquivos!

Por fim, exclua a pasta vinculada e é como se nada tivesse acontecido.

O plugin parece funcionar muito bem. Experimente! Apenas tome cuidado para criar SOMENTE links físicos (sem soft links ou junções) e certifique-se de trabalhar com os links e não com os arquivos reais!

Agora, para aqueles que mencionariam o mklink, aqui está o que encontrei ao desenvolver esta resposta. Usar o mklink por meio do prompt de comando executado como administrador (pesquise CMD, clique com o botão direito e execute como administrador) DEVE funcionar da mesma forma ... Mas não funcionou para mim (e para MUITOS outros, se você pesquisar). Recebi um acesso negado mesmo depois de modificar os privilégios via secpol.msc. Parece ser um problema predominante.

Responder4

Extensão de shell de link

Este utilitário adiciona uma extensão de shell ao menu de contexto do Windows Explorer, permitindo arrastar/soltar a criação delinks físicos,junçõeselinks simbólicos. É muito antigo, criado pela primeira vez em 1999, mas ainda está sendo atualizado e funciona conforme o esperado. Acredito que esta seja a solução mais fácil de usar.

Imagem de exemplo

informação relacionada