我想检查本地计算机上的文件列表的md5sum,并将其与我在远程服务器上复制的相同文件的md5sum进行比较。

如果我分别在每台机器的终端中检查:

# local
find . -type f -name "*.fastq.gz" -exec md5sum {} + | awk '{print $1}' | sort | md5sum
> 5a58015f2abec5bb1ee3e6a003ec4beb  -

# remote
find . -type f -name "*.fastq.gz" -exec md5sum {} + | awk '{print $1}' | sort | md5sum
> 5a58015f2abec5bb1ee3e6a003ec4beb  -

现在,如果我将这些命令运行到bash脚本中:
path_local="path/to/data/"
server_remote="[email protected]"
path_remote="path/to/data/"

local_md5sum=$(find ${path_local} -type f -name "*.fastq.gz" -exec md5sum {} + | awk '{print $1}' | sort | md5sum)
echo "local_md5sum : ${local_md5sum}"
remote_md5sum=$(ssh ${server_remote} "find ${path_remote} -type f -name '*.fastq.gz' -exec md5sum {} + | awk '{print $1}' | sort | md5sum")
echo "remote_md5sum : ${remote_md5sum}"

> local_md5sum : 5a58015f2abec5bb1ee3e6a003ec4beb  -
> remote_md5sum : 4a32580085edf9e49e00c46920517dd1  -

我在脚本中看到的唯一区别是,我对'*.fastq.gz'使用了简单的引号,而不是在上一个命令中使用了双引号。但是我必须或者我收到find: paths must precede expression错误。

为什么我没有相同的md5sum,我该如何解决?

最佳答案

您遇到了一个报价问题:在“远程服务器”部分,您需要转义$,如下所示:awk '{print \$1}':

结果:

remote_md5sum=$(ssh ${server_remote} "find ${path_remote} -type f -name '*.fastq.gz' -exec md5sum {} + | awk '{print \$1}' | sort | md5sum")

10-05 20:38