Как изменить расширения всех файлов в папке на одно общее расширение, если все файлы имеют разные расширения?

У меня есть грейдер для COCI (соревнования по программированию), который читает входные файлы (txt[number].in), компилирует и запускает код (txt.cpp) и сопоставляет результат с выходным файлом (txt[number].out). Проблема в том, что входные файлы проблемы COCI имеют формат (txt.in.1), (txt.in.2), (txt.in.3) и т. Д. И аналогичные имена для выходных файлов.

Мне нужно изменить расширения входных файлов с txt.in.[number] на txt[number].in. (Нужно сделать то же самое для выходных файлов)

Кто-нибудь может мне помочь с этим?

В настоящее время я использую 13.04 Ubuntu.

3
задан 15.04.2020, 05:35

4 ответа

Используя терминал, я думаю, что это самый простой способ:

mmv -v "*.in.*" "#1#2.in"

Вот тест:

$ ls
txt.in.1  txt.in.2  txt.in.3
$ mmv -v "*.in.*" "#1#2.in"
txt.in.1 -> txt1.in : done
txt.in.2 -> txt2.in : done
txt.in.3 -> txt3.in : done
$ ls
txt1.in  txt2.in  txt3.in

По умолчанию, mmv не установлен в Ubuntu, но вы можете установить его из терминала, используя следующую команду:

sudo apt-get install mmv

См. man mmv для получения дополнительной информации.

3
ответ дан 15.04.2020, 05:36
  • 1
    @Labib666 хорошо, посмотрите мои новые редактирования. Но имейте в виду: It' s не хорошая практика для изменения вопроса после получения ответа. Используйте кнопка Ask Question , если у Вас есть новые вопросы. – n611x007 15.04.2020, 05:36
  • 2
    Спасибо и жаль о последнем ответе. I' m далеко от дома и едва имеют доступ к Интернету и человечности. Но это похоже его, что я хочу. I' ll возвращаются к тому, как только я добираюсь для попытки этого. – JB Nizet 15.04.2020, 05:37
  • 3
    @Labib666 хорошо. Так, Вы видели мои новые редактирования в ответе? – dantiston 15.04.2020, 05:37
  • 4
    Еще раз спасибо. I' ll пытаются не сделать такие ошибки со следующего раза. I' m довольно новый здесь. Так, просто приобретение знаний из ошибок. – Pace 15.04.2020, 05:37
  • 5
    Привет, жаль для беспокойства Вас снова. Я просто изменил вопрос немного. Так как я не знаю, как mmv работает, я нуждаюсь в Вашей помощи, чтобы знать, как я должен внести изменение. – Richard Fearn 15.04.2020, 05:38

Если все в порядке, что file.in.1 становится file.in.1.in, то это будет делать

rename 's/$/.in/' *

Если вы считаете, что два в уродливы, тогда сделайте [ 117]

rename 's/\.in(\.\d+)$/$1.in/' *

Передайте опцию -n, чтобы выполнить пробный прогон.

2
ответ дан 15.04.2020, 05:35
  • 1
    Я знал этого. К сожалению, .in и .out файлы должны иметь те же имена. Так это doesn' t действительно помогают. Спасибо за попытку, хотя:) – Adam Parkin 15.04.2020, 05:35
  • 2
    Можно сделать его немного более простым, чем это, я думаю, например, s/(\.in)(\.\d+)/$2$1/. Также для безопасности it' s хорошая практика для маркировки конца списка опций т.е. rename -nv -- 's/(\.in)(\.\d+)/$2$1/' * (на всякий случай там, оказывается, любые файлы, запускающиеся с -), – John La Rooy 15.04.2020, 05:36

Версия с использованием rename, которая подходит для вашего исправленного формата, будет

rename -- 's/(\.in|\.out)\.(\d+)/$2$1/' *

, например

$ ls
txt.in.1  txt.in.2  txt.in.3  txt.out.1  txt.out.2  txt.out.3
$
$ rename -nv -- 's/(\.in|\.out)\.(\d+)/$2$1/' *
txt.in.1 renamed as txt1.in
txt.in.2 renamed as txt2.in
txt.in.3 renamed as txt3.in
txt.out.1 renamed as txt1.out
txt.out.2 renamed as txt2.out
txt.out.3 renamed as txt3.out
0
ответ дан 15.04.2020, 05:36
  • 1
    Хорошо Вы могли измениться \d+ (одна или несколько цифр) на \w+ (один или несколько от набора [a-zA-Z0-9 _] в любом порядке), хотя это будет соответствовать вещам как 2c3, aBa также; если необходимо соответствовать ТОЧНО одной или нескольким цифрам, дополнительно сопровождаемым одной или несколькими алфавитными буквами, изменение (\d+) к (\d+([[:alpha:]]+)?) или ([[:digit:]]+([[:alpha:]]+)?) - необходимо, вероятно, искать некоторую информацию [приблизительно 117] регулярные выражения жемчуга и попытаться выяснить точно, что Вам нужны себя – Heisenbug 15.04.2020, 05:37
  • 2
    Спасибо за справку.:) Было бы полезно, если бы Вы говорите мне, как команды посмотрели бы, если бы я изменял расширение txt.in. [число] [алфавит] к txt [число] [алфавит] .in. Я просто услышал, что были расширения как они также.: ( – Travis 15.04.2020, 05:37

Этот скрипт скопирует все файлы в рабочем каталоге, которые соответствуют * .in. *

#!/bin/bash
for i in $(ls *.in.*)
do
    target=$(echo ${i} | awk -F'.' '{ print $1$3"."$2 }')
    cp ${i} ${target}
done
0
ответ дан 15.04.2020, 05:37
  • 1
    I' ll возвращаются к Вам после того, как я попробую его на своем компьютере. Спасибо.:) – n611x007 15.04.2020, 05:37

Теги

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