Использование переименовать команды

У меня есть два вопроса о части.

У меня есть серия файлов с именами "файл pdb.#", где # является целым числом.

1.) Как я могу написать сценарий для переименования всего "файла pdb.#" к "file_#.pdb", где целое число сохраняется? Все файлы находятся в том же каталоге.

Я, по-видимому, должен читать в постоянной строке (file.pdb). причем переменная является #.

2.) Еще более важный, как я искал бы этот ответ, правильно, среди вопросов, на которые отвечают? Я не сомневаюсь, что на этот вопрос отвечали много раз прежде. Однако я не уверен, как я, возможно, правильно искал ответ на этот вопрос (и очевидно я должен учиться искать вопросы, на которые ранее отвечают, лучше для не беспокойства людей в будущем). Я не могу вообразить то, что правильная строка поиска (поиск с помощью Google, как читать в файлах и переименовать их в Linux, ужасно универсально, и я пробрался через предложения, не релевантные этому виду управления форматом файла).

1
задан 2 July 2015 в 06:28

3 ответа

Можно использовать , обратные ссылки например,

, групп и получения
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
5
ответ дан 3 December 2019 в 06:25

Самый строгий возможный путь, так, чтобы только имена файлов, запускающиеся с file.pdb. сопровождаемый, по крайней мере, цифрой, были переименованы, с помощью rename:

rename -n 's/(file)(\.pdb)\.([0-9]+)/$1_$3$2/' *

, Если результатом является ожидаемый, удалите -n опция:

rename 's/(file)(\.pdb)\.([0-9]+)/$1_$3$2/' *
1
ответ дан 3 December 2019 в 06:25

Кроме превосходного rename ответы, которые Вы уже получили, можно использовать bash расширение параметра:

for i in *.pdb.*; do mv -i "$i" "${i%%.pdb.*}_${i##*.}.pdb"; done
  • шаблон ${i%%.pdb*} доберется file, часть имени file.pdb.#

  • ${i##*.} получит цифры после .pdb.

1
ответ дан 3 December 2019 в 06:25

Другие вопросы по тегам:

Похожие вопросы: