如何更改md5sum命令输出的分隔符

时间:2011-10-10 20:44:36

标签: bash unix

我的代码如下所示:

for i in `find` ; 
do
    if [ -f $i ]; then
        if [ "$i" != "./ex.sh" ]; then
            md5sum $i >> checksums.txt;
        fi
    fi
done

问题是我想稍后用“|”在文件上使用awk作为分隔符。但是我不知道如何用“|”追加文件checksums.txt在md5sum和$ i之间。 感谢

3 个答案:

答案 0 :(得分:2)

包括这个问题,我已经阅读了至少3个关于同一问题的问题。我想你想在某个目录下找到所有重复的文件,对吗?

然后你可以尝试下面的一个衬垫,它会保存你以后的循环或双循环和awk处理:

find {what you want to find comes here} -exec md5sum '{}' \; | sort | uniq -d -w 33

它将列出重复的md5sum和文件名。

如果我的猜测错了,请忽略我的回答。

答案 1 :(得分:1)

使用此:

md5sum  $i | tr -s " " | tr " " "|" >> checksums.txt

答案 2 :(得分:1)

md5sum(至少GNU coreutils中的版本)不提供控制输出格式的选项。您应该更改awk脚本以将字符0 ... 15视为md5sum,将字符18作为文件名视为行尾。如果您确实需要特定格式,则应解析md5sum的输出。例如:

user@host:~$ md5sum "/dev/null" | python -c 'import sys; s = sys.stdin.read(); print s[0:32] + "|" + s[34:],'
d41d8cd98f00b204e9800998ecf8427e|/dev/null

此外,您应该将参数括在md5sum的引号(md5sum "$i")中。如上所述,如果有任何包含空格或特殊字符的文件名,脚本将失败。