小编use*_*391的帖子

查找 | xargs shasum 创建校验和文件本身的校验和(过早地)并在检查时失败

我的问题(在带有 的脚本中#!/bin/sh)如下:为了存档目的,我尝试对目录中的所有文件进行校验和。具有所有文件名的校验和(在我的情况下为 sha1)文件应位于同一目录中。假设我们有一个~/test包含文件f1f2:的目录。

mkdir ~/test
cd ~/test
echo "hello" > f1
echo "world" > f2
Run Code Online (Sandbox Code Playgroud)

现在计算校验和

find -maxdepth 1 -type f -printf '%P\n' | xargs shasum
Run Code Online (Sandbox Code Playgroud)

正是我想要的,它只列出当前目录的所有文件并计算 sha1 总和(maxdepth 可能会在以后更改)。STDOUT 上的输出是:

f572d396fae9206628714fb2ce00f72e94f2258f  f1
9591818c07e900db7e1e0bc4b884c945e6a61b24  f2
Run Code Online (Sandbox Code Playgroud)

不幸的是,当尝试将其保存到文件时

find -maxdepth 1 -type f -printf '%P\n' | xargs shasum > sums.sha1
Run Code Online (Sandbox Code Playgroud)

生成的文件显示自身的校验和:

da39a3ee5e6b4b0d3255bfef95601890afd80709  sums.sha1
f572d396fae9206628714fb2ce00f72e94f2258f  f1
9591818c07e900db7e1e0bc4b884c945e6a61b24  f2  
Run Code Online (Sandbox Code Playgroud)

因此在稍后失败shasum --check,因为在保存最后一个总和时附加文件修改的明显问题。

我环顾四周,通过使用-p标志 for xargs,我发现它甚至在执行 find 命令之前以某种方式创建了输出文件,因此找到了附加文件并将进行校验......

我知道作为一种解决方法,我可以将校验和保存到另一个位置(通过 临时目录mktemp)或专门在 find …

find xargs hashsum checksum

10
推荐指数
2
解决办法
1648
查看次数

标签 统计

checksum ×1

find ×1

hashsum ×1

xargs ×1