7

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

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

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

3 回答 3

16

我会走这条路:

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

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

于 2011-11-20T13:20:09.110 回答
16

这可能对您有用:

# 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'
于 2011-11-20T20:56:06.197 回答
0
find . -type f -exec mv \{\} "`md5sum \{\} | sed 's/ .*//'`.`echo \{\} | awk -v FS='.' '{print $NF}'\" 

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

高温高压

于 2011-11-20T13:24:06.970 回答