我有一些checksums.md5
来自 ntfs 外部驱动器的验证文件,但使用 Windows 表示法:\
而不是/
,文件名之间的空格(未转义),保留的 shell 字符(例如(
,&
,'
, 等等)。
有checksums.md5
一堆校验和和文件名:
;Created by program
;2010
f12f75c1f2d1a658dc32ca6ef9ef3ffc *My Windows & Files (2010)\[bak]\testing.wmv
53445e1a0821b790872e60bd7a166887 *My Windows Files' 2 (2012)\[bak]\testing.wmv
53445e1a0821b790872e60bd7a166887 *My Windows Files ˜nicóde (2012)\[bak]\testing.wmv
;Finished
我想使用它checksums.md5
来验证我复制到机器上的文件:但我使用的是 Linux,因此我需要将里面的名称从 Windows 转换为 Linux,以便从 shellchecksums.md5
使用该实用程序。我示例中的第一行将变为:md5sum
f12f75c1f2d1a658dc32ca6ef9ef3ffc My\ Windows\ \&\ Files\ \(2010\)/\[bak\]/testing.wmv
是否有一些应用程序可以实现这一点(将文件列表从 Windows cmd 符号转换为 Linux shell 符号)或者我是否需要使用 sed 创建一个 bash 脚本来“替换”文件名中的“错误”内容?
答案1
sed -i 's|\\|/|g' checksums.md5
输出md5sum
格式不使用任何“shell 符号” – 既不是cmd
也不是sh
。每行恰好有两个字段(哈希和文件名),因此文件名不需要转义。
这仅有的\
不同之处在于,在不同的系统中, versal/
作为路径分隔符的使用方式不同。(大多数 Windows 程序/
也接受。)只需替换所有反斜杠即可。
答案2
md5deep 不仅适用于 Windows 和 Linux,而且 100% 跨平台兼容。请查看http://md5deep.sourceforge.net/