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

Вы можете добавить setxkbmap к автозапуску с таким политоновым вариантом, как это

echo '@setxkbmap -layout "us,gr,gr" -option "grp:alt_shift_toggle" -variant ",,polytonic"' | sudo tee -a /etc/xdg/lxsession/Lubuntu/autostart

Это комбинация клавиш Alt + Shift для изменения макета и для En (us) -Gr языков.

Выполнено.

1
задан 11 October 2013 в 11:38

3 ответа

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

rename 's/$/.in/' *

Если вы считаете, что два in's уродливы, тогда сделайте

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

Для выполнения сухого хода передайте параметр -n.

2
ответ дан 24 May 2018 в 17:17
  • 1
    Вы можете сделать это немного проще, чем я думаю, например. [F1]. Также для безопасности рекомендуется отметить конец списка опций, т. Е. [F2] (на всякий случай, если будут файлы, начинающиеся с -) – steeldriver 4 October 2013 в 17:44
  • 2
    @steeldriver Хорошая точка, регулярное выражение не привязано к ^, поэтому первое также можно свести к 's/$/.in/'. А второй можно упростить еще дальше. Будет исправлено решение. – zwets 4 October 2013 в 23:15
  • 3
    Я знал это. К сожалению, файлы .in и .out должны иметь одинаковые имена. Так что это действительно не помогает. Спасибо за попытку хотя :) – Labib666 10 October 2013 в 16:25

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

#!/bin/bash
for i in $(ls *.in.*)
do
    target=$(echo ${i} | awk -F'.' '{ print $1$3"."$2 }')
    cp ${i} ${target}
done
0
ответ дан 24 May 2018 в 17:17
  • 1
    Я вернусь к вам после того, как попробую его на своем компьютере. Благодарю. :) – Labib666 11 October 2013 в 17:37

Версия, использующая 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
ответ дан 24 May 2018 в 17:17
  • 1
    Спасибо за помощь. :) Было бы полезно, если бы вы сказали мне, как будут выглядеть команды, если бы я менял расширение txt.in. [number] [alphabet] на txt [number] [alphabet] .in. Я только слышал, что есть такие расширения, как эти. :( – Labib666 11 October 2013 в 22:50
  • 2
    Ну, вы можете изменить \d+ (одну или несколько цифр) на \w+ (один или несколько из набора [a-zA-Z0-9_] в любом порядке), хотя это будет соответствовать вещам вроде 2c3, также; если вам нужно соответствовать ТОЧНО одной или нескольким цифрам, за которыми следует одна или несколько буквенных букв, измените (\d+) на (\d+([[:alpha:]]+)?) или ([[:digit:]]+([[:alpha:]]+)?) - вам, вероятно, следует найти некоторую информацию о регулярных выражениях perl и попытайтесь выяснить, что именно вам нужно – steeldriver 11 October 2013 в 23:29

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

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