Как переименовать разделенный файл [az] в разделенный файл [1-26]

Согласно https://forum.antergos.com/topic/4006/libreoffice-writer-has-awful-gradient-in-toolbar-backgrounds/2

Вам нужно создать, добавить или разкомментировать эту строку в файле /etc/profile.d/libreoffice-fresh.sh:

export SAL_USE_VCLPLUGIN=gtk

...

7
04.01.2016, 18:17
4 ответа

Вот способ сделать это с помощью POSIX shell, предполагая, что все файлы существуют в последовательности a-z:

#!/bin/sh
i=1
for f in file[a-z].csv
do
    echo mv $f file$i.csv
    i=$((i+1))
done
0
27.01.2020, 20:13

Этот сценарий sh правильно переименовывает файлы, даже если файлы отсутствуют в последовательности az :

#!/bin/sh
for n in $(seq 26)
do
    f=$(printf $(printf 'file\%03o.csv' $((n+96))))
    [ -e $f ] && echo mv $f file$n.csv
done
1
27.01.2020, 20:13

Вот альтернативное предложение, которое не поддерживает отсутствующие файлы, но я чувствовал необходимость попробовать более "функциональное" решение, работающее с кортежами:

#!/bin/bash
splitfile_renamer() {
  mv splitfile$1 splitfile$2.csv
}

paste <(echo -en {a..z}"\n") <(seq 26) | while read args
  do splitfile_renamer $args
done

Вышеприведенный вариант использует paste для создания кортежей аргументов (разделенных пробелами) и передает их предварительно созданной функции, которая затем принимает их в качестве пронумерованных аргументов.

0
27.01.2020, 20:13

С новым bash вы можете использовать расширение фигурных скобок в форме {a..z} :

i=1; for f in file{a..z}; do mv "$f.csv" "${f%?}$((i++)).csv"; done
10
27.01.2020, 20:13

Теги

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