Переименование файлов в md5 sum + расширение (BASH)
Мне нужна помощь со скриптом на bash. Скрипту необходимо переименовать все файлы в каталоге в его расширение md5 sum+.
Я нашел скрипт bash ниже, но его нужно изменить, чтобы он добавил расширение.
md5sum * | sed 's/^(w*)s*(.*)/ /' | while read LINE; do mv $LINE; done
3 ответов
Это может сработать для вас:
# 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 /' | 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 /e'
Я бы пошел по этому маршруту:
for F in $DIR/*.*; do
mv "$F" "$(md5sum "$F" | cut -d' ' -f1).${F##*.}";
done
использовать ${F#*.}
получить все после первого периода, например,tar.gz
вместо gz
(зависит от ваших требований)
find . -type f -exec mv \{\} "`md5sum \{\} | sed 's/ .*//'`.`echo \{\} | awk -v FS='.' '{print $NF}'\"
или что-то вроде этого будет делать: -). На самом деле, я бы рекомендовал добавить фильтр к именам файлов для команды find, поскольку он не будет работать с файлами без .
на свое имя.
HTH