将文件重命名为 md5 sum + 扩展名 (BASH)

Posted

技术标签:

【中文标题】将文件重命名为 md5 sum + 扩展名 (BASH)【英文标题】:Rename files to md5 sum + extension (BASH) 【发布时间】:2012-01-02 08:33:46 【问题描述】:

我需要一些关于 bash 脚本的帮助。脚本需要将目录中的所有文件重命名为其 md5 sum + 扩展名。

我在下面找到了 bash 脚本,但需要对其进行更改,以便添加扩展。

md5sum * | sed 's/^\(\w*\)\s*\(.*\)/\2 \1/' | while read LINE; do mv $LINE; done

【问题讨论】:

【参考方案1】:

这可能对你有用:

# mkdir temp && cd temp && touch file.a..e
# ls
file.a  file.b  file.c  file.d  file.e
# md5sum * | sed -e 's/\([^ ]*\) \(.*\(\..*\)\)$/mv -v \2 \1\3/' | sh
`file.a' -> `d41d8cd98f00b204e9800998ecf8427e.a'
`file.b' -> `d41d8cd98f00b204e9800998ecf8427e.b'
`file.c' -> `d41d8cd98f00b204e9800998ecf8427e.c'
`file.d' -> `d41d8cd98f00b204e9800998ecf8427e.d'
`file.e' -> `d41d8cd98f00b204e9800998ecf8427e.e'

或者 GNU sed 可以做得更短:

# md5sum * | sed -e 's/\([^ ]*\) \(.*\(\..*\)\)$/mv -v \2 \1\3/e'

【讨论】:

Apple/OSX 版本为:md5 * | sed -e 's/MD5 (\([^.]*\)\(.[^)]*\)) = \(.*\)$/mv -v "\1\2" \3\2/' | sh 如果您在 OSX 上有大量文件:ls -1 | while read file; do md5 "$file" | sed -e 's/MD5 (\(.*\)\(\.[^\d]*\)) = \(.*\)$/mv -v "\1\2" "\3\2"/' | sh ; done(这扩展自 @fnl 的版本以处理我在某些文件名中有带小数的时间戳的情况) 此解决方案可能无法处理带空格的文件名,请注意。我有一些文件不能用这个,它们都有空格【参考方案2】:

我会走这条路:

for F in $DIR/*.*; do
  mv "$F" "$(md5sum "$F" | cut -d' ' -f1).$F##*.";
done

使用$F#*. 获取第一期之后的所有内容,例如tar.gz 而不是 gz(取决于您的要求)

【讨论】:

OSX:for F in $DIR/*.*; do mv "$F" "$(md5 "$F" | cut -d' ' -f4).$F##*."; done【参考方案3】:
find . -type f -exec mv \\ "`md5sum \\ | sed 's/ .*//'`.`echo \\ | awk -v FS='.' 'print $NF'\" 

或者这样的事情会做:-)。实际上,我建议为 find 命令的文件名添加一个过滤器,因为它会在名称中没有 . 的文件上失败。

HTH

【讨论】:

以上是关于将文件重命名为 md5 sum + 扩展名 (BASH)的主要内容,如果未能解决你的问题,请参考以下文章

将文件重命名为哈希和扩展名

将 WebP 重命名为 JPG 或其他格式的缺点?

dos命令将文件名和扩展名分隔为变量

如何在gmail中下载包含.exe文件的.rar文件(附件)

linux下使用openssl和md5sum加密文件或者字符串

如何将文件重命名为另一个文件系统?