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

ICT*_*net 6 linux bash rename batch-rename

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

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

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

kni*_*ttl 14

我会走这条路:

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

用于${F#*.}在第一个时期之后获得所有东西,例如tar.gz代替gz(取决于您的要求)


pot*_*ong 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'
Run Code Online (Sandbox Code Playgroud)

或者GNU sed可以做得更短:

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

  • Apple/OSX版本是:`md5*| sed -e's/MD5(\([^.]*\)\(.[^]]*\))= \(.*\)$/mv -v"\ 1\2"\ 3\2 /'| sh` (2认同)