Переименование файлов в bash с пронумерованными именами файлов

В одной папке у меня много файлов с именами типа MR000001, MR000002 и т.д. вплоть до MR000070. У меня много папок с такими файлами. Я хочу скопировать все файлы в одну папку и переименовать их, чтобы количество продолжало увеличиваться. Например, при копировании второй партии из 70 я хотел бы переименовать файлы так, чтобы они начинались с 71 и заканчивались 140; при копировании третьей партии я бы хотел, чтобы их имена начинались с 141 и доходили до 210. Как я могу сделать это с помощью сценария bash? Пока что у меня это:

for f in MR0000*;
do 
  cp "$f" "";
done

Я думаю, что я должен быть в состоянии заполнить пустую цитату чем-то, чтобы выполнить то, что я хочу, но я не знаю, что.


person Vivek Subramanian    schedule 15.10.2016    source источник
comment
Вы также можете использовать printf -v и воспользоваться строкой формата printf для создания имени файла, дополненного числовым числом до заданного количества цифр. например declare -i cnt=0; for i in path/to/files/*; do printf -v newname "MR%5d" "$cnt"; mv "$i" "$newname"; $((cnt++)); done   -  person David C. Rankin    schedule 15.10.2016


Ответы (1)


В одну сторону:

dst_dir=where/you/want/these/files/to/end/up/
dst_filenumber=0
for src_dir in where/they/are/now/1 where/they/are/now/2 ; do
  for src_filepath in "$src_dir"/MR0000* ; do
    (( dst_filenumber++ ))
    dst_filename="$(printf MR%06d "$dst_filenumber")"
    cp "$src_filepath" "$dst_dir/$dst_filename"
  done
done
person ruakh    schedule 15.10.2016