我需要一些bash脚本的帮助。脚本需要将目录中的所有文件重命名为md5 sum + extension。
我在下面找到了bash脚本,但需要进行更改以便添加扩展名。
md5sum * | sed 's/^\(\w*\)\s*\(.*\)/\2 \1/' | while read LINE; do mv $LINE; done
答案 0 :(得分:13)
我会走这条路:
for F in $DIR/*.*; do
mv "$F" "$(md5sum "$F" | cut -d' ' -f1).${F##*.}";
done
使用${F#*.}
获取第一期后的所有内容,例如tar.gz
代替gz
(取决于您的要求)
答案 1 :(得分:13)
这可能对您有用:
# 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'
答案 2 :(得分:0)
find . -type f -exec mv \{\} "`md5sum \{\} | sed 's/ .*//'`.`echo \{\} | awk -v FS='.' '{print $NF}'\"
或类似的事情会:-)。实际上,我建议在find命令的文件名中添加一个过滤器,因为它会在名称中没有.
的文件中失败。
HTH