У меня есть два вопроса о части.
У меня есть серия файлов с именами "файл pdb.#", где # является целым числом.
1.) Как я могу написать сценарий для переименования всего "файла pdb.#" к "file_#.pdb", где целое число сохраняется? Все файлы находятся в том же каталоге.
Я, по-видимому, должен читать в постоянной строке (file.pdb). причем переменная является #.
2.) Еще более важный, как я искал бы этот ответ, правильно, среди вопросов, на которые отвечают? Я не сомневаюсь, что на этот вопрос отвечали много раз прежде. Однако я не уверен, как я, возможно, правильно искал ответ на этот вопрос (и очевидно я должен учиться искать вопросы, на которые ранее отвечают, лучше для не беспокойства людей в будущем). Я не могу вообразить то, что правильная строка поиска (поиск с помощью Google, как читать в файлах и переименовать их в Linux, ужасно универсально, и я пробрался через предложения, не релевантные этому виду управления форматом файла).
Можно использовать , обратные ссылки например,
, групп и полученияrename -vn -- 's/\.(pdb)\.(\d+)/_$2.$1/' *.pdb.*
для соответствия литеральному периоду \.
сопровождаемый (литеральной) строкой pdb
, сопровождаемый вторым периодом \.
и затем последовательность одной или нескольких цифр \d+
, копируя строку и последовательность цифры в пронумерованные группы $1
и $2
получения соответственно и затем повторно заменяя ими в обратном порядке с подчеркиванием вместо первого периода.
Опции -v
и -n
для подробного вывода (перечисляющий любые внесенные изменения) и без операций, позволяя Вам протестировать правильность перед согласием на создание любых фактических замен: необходимо будет удалить n
опция на самом деле применить изменения .
--
метки конец опций команды - это просто делает команду более устойчивой в редком случае, что у Вас есть имена файлов, которые запускаются с дефиса.
Тестирование его в каталоге, содержащем файлы file.pdb.1 file.pdb.2 file.pdb.3 file.pdb.4 file.pdb.5
(среди других):
$ rename -vn -- 's/\.(pdb)\.(\d+)/_$2.$1/' *.pdb.*
file.pdb.1 renamed as file_1.pdb
file.pdb.2 renamed as file_2.pdb
file.pdb.3 renamed as file_3.pdb
file.pdb.4 renamed as file_4.pdb
file.pdb.5 renamed as file_5.pdb
Самый строгий возможный путь, так, чтобы только имена файлов, запускающиеся с file.pdb.
сопровождаемый, по крайней мере, цифрой, были переименованы, с помощью rename
:
rename -n 's/(file)(\.pdb)\.([0-9]+)/$1_$3$2/' *
, Если результатом является ожидаемый, удалите -n
опция:
rename 's/(file)(\.pdb)\.([0-9]+)/$1_$3$2/' *
Кроме превосходного rename
ответы, которые Вы уже получили, можно использовать bash
расширение параметра:
for i in *.pdb.*; do mv -i "$i" "${i%%.pdb.*}_${i##*.}.pdb"; done
шаблон ${i%%.pdb*}
доберется file
, часть имени file.pdb.#
${i##*.}
получит цифры после .pdb.