所使用的 sed 命令细分

所使用的 sed 命令细分

md5sum在验证某些复制的文件时遇到一些困难。

我有两个目录:dir1dir2.其中dir1有五个文件:file1file2file3file4.是空的。file5dir2

如果我做:cp dir1/* dir2

然后:md5sum dir1/* > checksums

然后:md5sum -c checksums

结果是:

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

但这并不好。我希望它将文本文件中的校验和与 dir2 中复制文件的校验和进行比较。

答案1

尝试:

$ (cd dir1 && md5sum *) > checksums
$ cd dir2
$ md5sum -c ../checksums

checksums的内容如下所示:

d41d8cd98f00b204e9800998ecf8427e  file1
................................  file2
................................  file3
................................  file4
................................  file5

答案2

可以试试这个

#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"

这是您自己的游戏...直接回答您关于如何检查 dir2 的问题...只需在每个带有 sed 的文件前面强制使用 /dir2/ 即可。它给出了检查文件的绝对路径。

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

所使用的 sed 命令细分

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.

答案3

最基本的操作形式是通过运行生成校验和文件的一个副本:

md5sum Dir1/* 

转到您要测试复制完成的有效性的目录。 (如果您在备份或类似操作时同时复制其他文件,则无需单独执行此操作:)

cp checksum Dir2/checksum
cd Dir2

更改到第二个目录可以使命令变得更简单,如果您可能必须处理丢失的文件,它将有助于确保您拥有在终端(及其命令历史记录)中工作的文件的正确路径,如果没有的话,这可以否则,稍后将它们复制并粘贴到命令行中。

md5sum -c checksum 

提供副本的完整性。

相关内容