Como se pode desfazer muitos hard links?

0

Eu estupidamente usei Dupemerge para alterar todos os meus arquivos duplicados em links físicos. Agora, o Windows XP não está funcionando corretamente, por exemplo, o Explorer não inicia.

Existe algum utilitário que percorra o sistema de arquivos procurando links físicos, copie o arquivo, exclua o link original e renomeie a cópia, mantendo os atributos e o nome originais?

    
por BinaryMisfit 01.11.2009 / 08:10

8 respostas

1

Eu duvido que haja um utilitário para desfazer o que foi feito. Você pode procurar duplicatas novamente, verificar suas contagens de links e atributos (ou talvez o Dupemerge possa ajudar a identificar hard links para os mesmos arquivos) e fazer a cópia manualmente. Isso pode pelo menos ajudá-lo a descobrir se os links físicos são a causa dos problemas.

    
por 01.11.2009 / 09:32
1
  • Como você os converteu em links físicos, talvez esteja com sorte e eles ainda podem aparecer como duplicatas usando algo como DoubleKiller .

  • De qualquer forma, duvido que exista um utilitário para essa tarefa exata .

Se tudo mais falhar, recomendo uma reinstalação ...

    
por 01.11.2009 / 11:29
1

para corrigir o sistema operacional, use o verificador de arquivos do sistema:

insira o CD de instalação do windows xp

pressione CTRL + ALT + DEL para abrir o gerenciador de tarefas, vá para Arquivo > Execute (Nova Tarefa) e digite sfc / scannow e clique em OK.

nota: isto irá restaurar apenas os arquivos do sistema, mas você irá tentar novamente. quanto a outros softwares afetados, você terá que reinstalar ou reparar a instalação, quando necessário.

    
por 01.11.2009 / 13:53
1

Atualizar.

Coisas que não funcionaram:

  1. Não encontrei nenhuma ferramenta legal para desfazer hardlinks (ou seja, hardlinks de ID, copiar o arquivo, excluir hardlink, renomear a cópia para o nome do hardlink).
  2. Ran chkdsk no console de recuperação (após descompactar todos os arquivos)
  3. Meu disco do sistema Lenovo não me permitia reinstalar o Windows XP Home e o programa Rescue and Recovery da Lenovo não reinstalaria o Windows
  4. copiar (para uma segunda partição) e voltar não ajudou

O que eu fiz:

  1. copiou minha unidade C: para outra partição em um diretório "\ c-drive-2009Nov4 usando o Richcopy

  2. Em maio, instalei um novo disco maior, criando uma partição no novo disco da mesma forma que a minha antiga partição C :. Então eu copiei, usando um suporte USB, do meu antigo c: para a nova partição C: no novo disco. Então eu movi os dados & instala-se em uma nova partição de dados grande, deixando uma partição de sistema c: 70GB no anel mais rápido externo do HD. Então eu fiz isso de novo, usando um live boot linux GParted para copiar minha partição de maio para a minha partição na lixeira.

  3. Em seguida, usei a cópia que fiz do meu C-drive atual para recuperar os arquivos simples de que precisava, por exemplo, atualizei os arquivos BAT e reinstalei todos os programas mais recentes.

  4. Eu estava usando o FEBE para fazer backup do meu perfil do Firefox, então usei o backup para redefinir minhas configurações de FF, no Windows e no Ubuntu, que instalei em outra partição. O Ubuntu é como eu ainda tinha acesso à web e alguns utilitários. Funcionou muito bem, mesmo se preso na parte lenta do HD.

Perdas: alguns programas "giveawayoftheday" não posso registrar novamente, algumas configurações do programa.

    
por 13.11.2009 / 16:00
1

O SameFiles Assistant 3.1 pode funcionar:

Same Files Assistant is the hard links managing utility.

Especificamente, um recurso:

  • You can roll back hard links to the regular files at any time.
    
por 14.03.2010 / 23:01
0

Tente Hard Link Magic , pode ajudar.

Também a junção da Microsoft tem a capacidade de percorrer recursivamente diretórios e listar / excluir pontos de junção .

Apenas tenha cuidado para criar um ponto de restauração do sistema antes de fazer essas manipulações.

    
por 01.11.2009 / 08:57
0

Eu escrevi um script Perl que identifica todos os arquivos regulares que são hard links para os mesmos dados. O script funciona bem no UNIX e no Cygwin . Eu não testei com o Strawberry Perl ou qualquer outra porta do Windows do Perl, mas eu pensei em compartilhá-lo de qualquer maneira. No Windows (Cygwin) eu abriria um terminal e faria ./list-dup-hard-links /cygdrive/c/ .

#!/usr/bin/perl
#
# NAME
#
#   list-dup-hard-links - list regular file names pointing to the same inode
#
# SYNOPSIS
#
#   list-dup-hard-links DIRECTORY
#
# DESCRIPTION
#
#   For each inode that is referred to by more than one regular file, print
#   the inode number and the list of corresponding files.
#
# AUTHOR
#
#   Peter John Acklam <[email protected]>

use strict;                             # restrict unsafe constructs
use warnings;                           # control optional warnings
use File::Find;                         # traverse a file tree

if (@ARGV != 1) {
    die "Usage: $0 DIRECTORY\n";
}

my $start_dir = shift;                  # starting directory
my $start_dev = (stat $start_dir)[0];   # device number of where we start
my %inum2files;                         # map each inode number to file(s)

sub wanted {
    return if -l;                       # skip symlinks
    my @fileinfo = stat();              # get file info

    if (-d _) {                         # if a directory
        my $this_dev = $fileinfo[0];    # get device number
        if ($this_dev != $start_dev) {  # if we crossed a device boundary
            $File::Find::prune = 1;     #   mark directory for pruning
            return;                     #   and return
        }
    }

    return unless -f _;                 # continue only if a regular file

    my $inum = $fileinfo[1];            # get inode number
    push @{ $inum2files{$inum} },       # append this file to the list of
      $File::Find::name;                #   all files with this inode number
}

find(\&wanted, $start_dir);             # traverse the file tree

while (my ($inum, $files) = each %inum2files) {
    next if @$files < 2;                # skip non-duplicates

    print "\nInode number: $inum\n\n"   # print header
      or die "$0: print failed: $!\n";

    for my $file (@$files) {
        print "    $file\n"             # print file name
          or die "$0: print failed: $!\n";
    }
}
    
por 29.11.2011 / 16:00
0

No Unix, links para um arquivo vinculam o mesmo "inode number". A função "stat" retorna propriedades de arquivo como tamanho, modo, data de alteração, data de modificação, número de inode, ..., mas retorna o número de inode "0" para qualquer arquivo no Windows. Use perl Win32 :: IdentifyFile (CPAN) para obter um disco de arquivo "localização". Hard links "links" para o mesmo disco "localização".

    
por 09.10.2013 / 03:51