как имя файла заменить на его md5-сумму
Модератор: Olej
как имя файла заменить на его md5-сумму
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-сумму, расширение при этом остается?
cd tmp //зашел в эту директорию
touch kart.jpg kar.txt //создал два файла
md5sum *.* //вывел md5-сумму обеих файлов
ls –al> ls.txt // записал все файлы каталога в файл ls.txt
md5sum *>md.txt // в файле md.txt записана md5-сумма и названия файлов с расширением
как заменить имена файлов на их md5-сумму, расширение при этом остается?
Re: как имя файла заменить на его md5-сумму
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 символа то не получится, как подправить код?
cd $path
for i in *;
do s=$(md5sum $i);
mv $i ${s:0:32}.${i:(-3)};
done
Получилось так беру первые 32 сивола(md5 sum) и последние 3 символа получаю нужный файл, но это подходит только если расширение 3 символа. Если будет 4 символа то не получится, как подправить код?
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: как имя файла заменить на его md5-сумму
1. В таких задачах вам нужно пользоваться регулярными выражениями, а не численными длинами полей: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 символа то не получится, как подправить код?
Код: Выделить всё
[Olej@modules md5sum]$ md5sum 1111.lst
969ba0b950defb71704178a0765e62b5 1111.lst
Для этого вывод md5sum нужно пропустить через фильтр регулярного ввыражения, который может делаться программами awk, sed, grep ... или средствами самого bash.
Вот как, например awk выделяет поле по разделителю:
Код: Выделить всё
[Olej@modules md5sum]$ md5sum 1111.lst | awk '{ print $2 }'
1111.lst
2. Обратите внимание не некоторую некорректность самой постановки вашей задачи:
- в UNIX/Linux нет такого особенно выраженного понятия как расширение имени файла (это вам не Windows )
- и у файла может быть много компонент в имени, разделённых '.'
- например 1111.lst.txt.16-10-2014.cc
- какое "расширение" вы в этом случае хотели бы сохранить за переименованным файлом .cc или .lst.txt.16-10-2014.cc ?
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: как имя файла заменить на его md5-сумму
Посмотрите сюда: Искусство программирования на языке сценариев командной оболочкиOlej писал(а): Для этого вывод md5sum нужно пропустить через фильтр регулярного ввыражения, который может делаться программами awk, sed, grep ... или средствами самого bash.
Часть 4. Материал повышенной сложности
18. Регулярные выражения
Тема поднималась пользователем Olej 04 июн 2016, 08:34.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей