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

#bash #copy-paste #file-rename

#bash #копировать-вставить #файл-переименовать

Вопрос:

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

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

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

Комментарии:

1. Вы также можете использовать printf -v и использовать строку printf формата для создания имени файла, дополненного цифрами до заданного количества цифр. например declare -i cnt=0; for i in path/to/files/*; do printf -v newname "MR]" "$cnt"; mv "$i" "$newname"; $((cnt )); done

Ответ №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 MRd "$dst_filenumber")"
    cp "$src_filepath" "$dst_dir/$dst_filename"
  done
done