(Bash) переименовать файлы, но присвоить им новое расширение, которое будет учитываться.. (md5sum)

Мне нужно переименовать все файлы в папке и дать им новое расширение файла. Я знаю, как я могу переименовывать файлы с помощью bash. У меня проблема в том, что мне нужно переименовать его в:

file.01 file.02 file.03 и подсчет всех найденных файлов.

Может ли кто-нибудь дать мне пример, с чего начать?

Это то, что мне нужно:

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

но это не дает ему расширения, которое будет идти от file.01 file.02 file.03 и т. д.


person user1997874    schedule 21.01.2013    source источник
comment
Это не очень ясно. Вы хотите, чтобы счетчик был per-md5sum или глобальным? Приведите пример желаемых выходных имен. (Кроме того, \w недействителен в стандартном grep, который не поддерживает PCRE).   -  person Charles Duffy    schedule 21.01.2013


Ответы (2)


Если читать ваши требования буквально...

counter=0
for file in *; do
  read sum _ <<<"$(md5sum "$file")"
  printf -v file_new "%s.%02d" "$sum" "$counter"
  mv -- "$file" "$file_new"
  (( counter++ ))
done

Это менее эффективно, чем чтение имен файлов из вывода md5sum, но более надежно, поскольку подстановка безопасно обрабатывает файлы с необычными именами (новые строки, специальные символы и т. д.).

person Charles Duffy    schedule 21.01.2013
comment
Привет Чарльз, Спасибо за ваш ответ. Я хочу, чтобы он создавал md5sum с расширением, которое подсчитывает каждый найденный файл. ddshfbdfuydfgudgfuygdsfug.01 sdujfhiuh3whechbuecbywecc.02 djsfisufniudshfiusdhfiuhh.03 и т. д... я думаю, ваш пример будет работать! - person user1997874; 21.01.2013

что-то в этой строке:

i=0
for f in *
do
   if [ -f $f ]; then 
     i=`expr $i + 1` 
     if [ $i -lt 10 ]; then 
       i=0$i
     fi
     sum=`md5sum $f | cut -d ' ' -f 1` 
     mv $f $sum.$i 
   fi
done
person kofemann    schedule 21.01.2013
comment
Это сломано по нескольким причинам. Например, [ -f $f ] не будет правильно работать с именами файлов, содержащими пробелы, подстановочные знаки и т. д. Кроме того, числа, начинающиеся с нулей, в арифметике оболочки интерпретируются как восьмеричные, а не десятичные. - person Charles Duffy; 22.01.2013
comment
поэтому в заголовке написано: что-то рядом с этим - person kofemann; 22.01.2013