Dificuldade em usar 'md5sum -c'

1

Estou tendo alguma dificuldade em usar md5sum para verificar alguns arquivos copiados.

Eu tenho dois diretórios: dir1 e dir2 . Em dir1 , existem cinco arquivos: file1 , file2 , file3 , file4 e file5 . dir2 está vazio.

Se eu fizer isso: cp dir1/* dir2 ,

depois: md5sum dir1/* > checksums ,

depois: md5sum -c checksums ,

o resultado é:

dir1/file1: OK
dir1/file2: OK
dir1/file3: OK
dir1/file4: OK
dir1/file5: OK

Mas isso não é bom. Eu quero comparar as somas de verificação no arquivo de texto com as somas de verificação dos arquivos copiados em dir2.

Parece que a resposta é óbvia e estou sendo muito estúpido.

    
por EmmaV 05.07.2015 / 05:19

3 respostas

3

Tente:

$ (cd dir1 && md5sum *) > checksums
$ cd dir2
$ md5sum -c ../checksums
O conteúdo de

checksums seria parecido com:

d41d8cd98f00b204e9800998ecf8427e  file1
................................  file2
................................  file3
................................  file4
................................  file5
    
por 05.07.2015 / 05:30
0

Poderia tentar isto

#Create your md5 file based on a path - recursively
pathtocheck=INSERTYOURPATHHERE
find $pathtocheck -type f -print0 | xargs -0 md5sum >> xdirfiles.md5

#Compare All Files
md5results=$(md5sum -c xdirfiles.md5)

#Find files failing Integrity Check
echo "$md5results" | grep -v OK

#Count the files good or bad.
lines=0
goodfiles=0
badfiles=0
while read -r line;
do
  lines=$(($lines + 1))
  if [[ $line == *"OK"* ]]; then
    goodfiles=$(($goodfiles + 1))
  else
    badfiles=$(($badfiles + 1))
  fi
done <<< "$md5results"
echo "Total Files:$lines Good:$goodfiles - Bad: $badfiles"

Isso é para o seu próprio jogo lá em cima ... para responder diretamente à sua pergunta sobre como fazer com que cheque por dir2 ... simplesmente force o / dir2 / na frente de cada arquivo w / sed. Dá um caminho absoluto para verificar o arquivo.

sed -I "s/  /  \/dir2\//g" xdirfiles.md5

[root@server testdir]# md5sum somefile
d41d8cd98f00b204e9800998ecf8427e  somefile
[root@server testdir]# md5sum somefile > somefile.md5
[root@server testdir]# sed -i "s/  /  \/dir2\//g" somefile.md5
d41d8cd98f00b204e9800998ecf8427e  /dir2/somefile

quebra do comando sed usado

sed -i <- Inline replacement.
s/ <- Means to substitute. (s/thingtoreplace/replacewiththis/1)
"  " <- represented a double space search.
/ <- to begin the Replacement String values
"  \/dir2\/" <-  Double Spaces and \ for escape characters to use /. The
final /g means global replacement or ALL occurrences. 
/g <- Means to replace globally - All findings in the file. In this case, the md5 checksum file seperates the hashes with filenames using a doublespace. If you used /# as a number you would only replace the number of occurrences specified.
    
por 05.07.2015 / 06:46
0

A forma mais básica de operação teria uma cópia do arquivo de soma de verificação feito da execução:

md5sum Dir1/* 

para o diretório que você está querendo testar a validade da cópia feita. (Se você fizer isso enquanto também copia os outros arquivos quando faz o backup ou gosta, então você não precisa fazê-lo separadamente com:)

cp checksum Dir2/checksum
cd Dir2

Mudar para o segundo diretório pode tornar as coisas mais simples, e se você tiver que lidar com arquivos ausentes, isso ajudará a garantir que você tenha o caminho correto para os arquivos que estão trabalhando no terminal (e seu histórico de comandos). , se nada mais, deixe um copiar e cole-os nas linhas de comando mais tarde.

md5sum -c checksum 

Dá a integridade disso copiada.

    
por 12.03.2017 / 07:00