我正在尝试以以下特定格式将文件夹中每个文件的 md5 校验和输出到文本文件中:
checksumhash1 *NameOfFile1.ext
checksumhash2 *NameOfFile2.ext
checksumhash3 *NameOfFile3.ext
etc...
以下是需要的输出示例:
00c0eb18b7bfd2bf985451ae3ad5d68e *My Text File.txt
4935705ea05dabef98921b18aeeaadd3 *Another file.wmv
尝试了下面的命令,这是我能得到的最接近的命令:
md5 -r * | tee checksum.txt
从那以后我就迷路了,不知道如何让 md5 的输出符合我需要的格式。我只需要在文件名前面加上“*”。
有没有什么大师在呢?=P
答案1
您可以链接已经进入的输出sed
(或另一个流编辑程序)以添加所需的额外字符:
$ md5 -r * | sed's/ / */' 69c3da625b4570f94889c9562453d394 *文件1.扩展名 8046313ae98a6c9f1cb2c9957cdfbe7c *文件2.ext 16250bebbd00e759138d09dd0cab0cb8 *文件3.扩展名 d41d8cd98f00b204e9800998ecf8427e *带空格的文件.ext
在这种情况下,该sed
命令只是将第一个 [空格] 替换为 [空格][星号]。如果您需要它表现不同,您可以根据需要修改表达式。
答案2
首先,你不需要tee
,你可以直接使用 重定向到文件>
。现在,添加*
需要一些技巧。以下是一些技巧:
Perl
md5 * | perl -pe 's/ / */' > checksum.txt
这与 tenorkev 的答案相同,只是在 perl 中完成。该
-p
方法逐行处理输入,应用给出的脚本-e
并打印。s///
是替换运算符,用空格后跟替换第一个空格*
。纯壳
md5 * | while read a b; do echo "$a *$b"; done > checksum.txt
这里,
while read a b
将读取每一行,并根据空格将其拆分为变量$a
和$b
。这意味着将为$a
,而行的其余部分将为变量$b
。因此,打印 (echo
)$a *$b
将为您提供所需的输出。