#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