como localizar arquivos ausentes dos arquivos

0

Preciso ajudar um amigo a arquivar seus dados antigos (cerca de 200 GB). Vejo que muitos dos arquivos já estão presentes em um arquivo mais recente que ele possui, mas os arquivos mais recentes estão organizados adequadamente nos diretórios. Então não posso simplesmente usar rsync .

A minha pergunta é como obter facilmente uma lista apenas dos arquivos que não estão presentes no novo arquivo.

Por exemplo:

$ files_not_present old_dir new_dir
file1
file2
...
    
por akostadinov 23.12.2014 / 20:10

3 respostas

0

Não olhe para este hack feio abaixo. Se eu tiver que fazer isso de novo, atualizarei minha essência para ser mais útil: link

coisas inúteis abaixo:

Ok, usei essa abordagem se alguém precisar:

  1. obtenha uma lista de arquivos em arquivos novos e antigos:

    $ find new_dir -type f > arch.txt
    $ find old_dir -type f > arch_old.txt
    

    btw você pode usar find -name ".?*" -prune -o -type f para evitar arquivos ocultos

  2. use este script ruby para obter uma lista dos arquivos que estão presentes na porca de arquivo antiga e não na nova:

    org_arch = "arch.txt"
    to_arch = "arch_old.txt"
    
    # populate Hash with files under question to archive
    arch={}
    File.open(to_arch, "r") do |infile|
      while (line = infile.gets)
        arch[File.basename(line)] = line
      end
    end
    
    # remove from Hash what has already been archived
    File.open(org_arch, "r") do |infile|
      while (path = infile.gets)
        arch.delete(File.basename(path))
      end
    end
    
    #print files to be archived
    arch.each { |name,path|
      puts path
    }
    
  3. Veja o tamanho dos arquivos que você precisa copiar:

    cat to_arch.txt | xargs -d "\n" stat -c "%s" | awk '{size+=$1} END {print size}'
    

No meu caso, fui de 200 GB para cerca de 80. Espero que isso ajude alguém.

    
por 23.12.2014 / 21:55
0

digamos que sua pasta mais antiga seja old_folder e novo arquivamento como new_folder

você pode usar a seguinte linha para comparar duas pastas e listar os arquivos em old_folder que não estão disponíveis na pasta new_folder

for %%i in ("old_folder\*") do if not exist "new_folder\%%~nxi" echo(%%~i)>file.csv

Espero que isso ajude!

    
por 23.12.2014 / 21:01
0

Pelo que entendi, os arquivos têm os mesmos nomes, mas eles podem estar em subpastas diferentes. Você pode começar com o script e desenvolvê-lo para as Suas necessidades:

#!/bin/sh
[ -d "$1" -a -d "$2" ] || exit
old_dir="$1"
new_dir="$2"
find "$old_dir/" -type f -exec basename {} \; | sort > oldlist.txt
find "$old_dir/" -type f -exec basename {} \; | sort > newlist.txt
diff oldlist.txt newlist.txt | grep '<'

Execute este script:

./script.sh old_dir new_dir

A idéia é encontrar todos os nomes de arquivos (separar os nomes das pastas com basename ), ordenar as listas e compará-las com diff . A lista de arquivos será deixada nos arquivos oldlist.txt e newlist.txt .

    
por 23.12.2014 / 21:22