All4DK 01.09.2013 14:44

Есть вопрос!Случайный префикс для имени файла

Уважаемые мастера и гуру, вопрос для вас!

У меня есть хитрая задача - переименовать порядка 1000 файлов, добавив каждому случайный префикс (до 4 символов). Префикс может быть буквенно-цифровой.
Оптимально было-бы взять md5 от имени и 4 символа хеша приписать в начале. Но я не представляю как это можно сделать. Писать программу на ЯП высокого уровня - как-то не спортивно. И вот прошу вашей помощи и совета: можно-ли выполнить эту задачу только силами bash и если да, то с какой стороны подступиться?

Спасибо!


Тэги: bash командная строка
+ 1 -
Похожие Поделиться

Dark_SS 01.09.2013 15:14 #
1
2
3
4
5
6
#!/bin/bash

for X in *
do
mv $X `md5sum $X | cut -c-4`$X
done



Переименовывает и себя, когда лежит в каталоге с файлами :) Не трогает файлы с точки :(
Dark_SS 01.09.2013 16:44 #
Достаточно такого или допилить чегонить?
All4DK 01.09.2013 16:52 #
Возникла сложность с именами файлов с пробелами, но в итоге то, что нужно! Спасибо огромное!!
Dark_SS 01.09.2013 17:58 #
1
2
3
4
5
6
#!/bin/bash

for X in *
do
mv "$X" `md5sum "$X" | cut -c-4`"$X"
done

Исправил.
All4DK 01.09.2013 18:00 #
P.S. обожаю линукс! ))
Dark_SS 01.09.2013 18:06 #
О, я же хеш считаю не от имени.
1
2
3
4
5
6
#!/bin/bash

for X in *
do
mv "$X" `echo "$X"| md5sum | cut -c-4`"$X"
done

О так :)
dront78 01.09.2013 19:29 #
так рождался reiserfs
ReiserFS
Dark_SS 01.09.2013 23:51 #
Честно говоря, я в последнее время вас плохо понимаю :)
dront78 02.09.2013 10:41 #
ну сначала появился префикс от хеша имени файла для быстрого поиска, потом дело дошло до reiserfs
reiser созвучен со словом razor, ну и опасная бритва

ЗЫ.
у нас вообще релиз в конторе, меня мало кто сейчас понимает, моск в гиперпространстве))
Dark_SS 02.09.2013 17:36 #
Я-то от Рейзера сразу к убийству жены перешёл :) Но всё же))
dront78 03.09.2013 09:44 #
да. это тоже "созвучно" - дорогая отвали, у меня хеш не работает. бабы доводят мужиков в общем то
kmk 02.09.2013 16:49 #
Супер! Только что проверил. На данный момент не нужно, но в хозяйстве пригодится. :)
ananas 03.09.2013 14:39 #
1
2
3
for f in *; do
mv $f $(mktemp -u XXXX.$f)
done


ananas 03.09.2013 14:34 #
man mktemp
Dark_SS 04.09.2013 10:20 #
Никогда не используйте mktemp(). Некоторые реализации следуют BSD 4.3 и заменяют XXXXXX на идентификатор текущего процесса и один символ, так что Вы можете в результате получить максимум 26 разных имен. Так как, с одной стороны, имена легко угадываемы, а с другой стороны, возможно "состязание" между проверкой на существование имени файла и открытием файла при каждом использовании mktemp(), то безопасность системы будет под угрозой. Этого можно избежать при использовании функции mkstemp(3).
ananas 04.09.2013 18:18 #
не путай mktemp(3) и mktemp(1)