Страница 1 из 1

как имя файла заменить на его md5-сумму

Добавлено: 14 окт 2014, 11:13
Ychenik
mkdir tmp // Создал директорию tmp
cd tmp //зашел в эту директорию
touch kart.jpg kar.txt //создал два файла
md5sum *.* //вывел md5-сумму обеих файлов
ls –al> ls.txt // записал все файлы каталога в файл ls.txt
md5sum *>md.txt // в файле md.txt записана md5-сумма и названия файлов с расширением

как заменить имена файлов на их md5-сумму, расширение при этом остается?

Re: как имя файла заменить на его md5-сумму

Добавлено: 16 окт 2014, 11:27
Ychenik
echo -n "Vvedite put:" ; read path
cd $path
for i in *;
do s=$(md5sum $i);
mv $i ${s:0:32}.${i:(-3)};
done

Получилось так беру первые 32 сивола(md5 sum) и последние 3 символа получаю нужный файл, но это подходит только если расширение 3 символа. Если будет 4 символа то не получится, как подправить код?

Re: как имя файла заменить на его md5-сумму

Добавлено: 16 окт 2014, 11:47
Olej
Ychenik писал(а):echo -n "Vvedite put:" ; read path
cd $path
for i in *;
do s=$(md5sum $i);
mv $i ${s:0:32}.${i:(-3)};
done

Получилось так беру первые 32 сивола(md5 sum) и последние 3 символа получаю нужный файл, но это подходит только если расширение 3 символа. Если будет 4 символа то не получится, как подправить код?
1. В таких задачах вам нужно пользоваться регулярными выражениями, а не численными длинами полей:

Код: Выделить всё

[Olej@modules md5sum]$ md5sum 1111.lst 
969ba0b950defb71704178a0765e62b5  1111.lst
Вам нужно объединить (конкатенировать) 1-е поле, разделяемое пробелом + '.' + поле, следуещее (поиском) за символом '.'.
Для этого вывод md5sum нужно пропустить через фильтр регулярного ввыражения, который может делаться программами awk, sed, grep ... или средствами самого bash.
Вот как, например awk выделяет поле по разделителю:

Код: Выделить всё

[Olej@modules md5sum]$ md5sum 1111.lst | awk '{ print $2 }'
1111.lst
P.S. у меня, к сожалению, просто нет сейчас свободного времени сесть и составить вам запись регулярного выражения.

2. Обратите внимание не некоторую некорректность самой постановки вашей задачи:
- в UNIX/Linux нет такого особенно выраженного понятия как расширение имени файла (это вам не Windows ;-) )
- и у файла может быть много компонент в имени, разделённых '.'
- например 1111.lst.txt.16-10-2014.cc
- какое "расширение" вы в этом случае хотели бы сохранить за переименованным файлом .cc или .lst.txt.16-10-2014.cc ? ;-)

Re: как имя файла заменить на его md5-сумму

Добавлено: 04 июн 2016, 08:34
Olej
Olej писал(а): Для этого вывод md5sum нужно пропустить через фильтр регулярного ввыражения, который может делаться программами awk, sed, grep ... или средствами самого bash.
Посмотрите сюда: Искусство программирования на языке сценариев командной оболочки
Часть 4. Материал повышенной сложности
18. Регулярные выражения