Дополнение числа в имени файла к фиксированной длине

Другая программа, которую можно использовать, mutt. Я предпочитаю использовать mutt кому: mail - это просто имеет более хороший интерфейс, по-моему.

# apt-get install mutt

должен работать - но я использую Fedora не, Ubuntu так не может подтвердить это.

6
26.09.2011, 15:52
5 ответов

Это будет также работать:

for f in *.png; do
    int=`basename $f .png | cut -d '.' -f 2`
    new_name=`printf "file.%0.4i.png\n" $int`
    [ ! -f $new_name ] && mv $f $new_name
done
6
27.01.2020, 20:21
  • 1
    +1 начиная с этого дескриптора не попросивший файла 11001.png, а также фиксации описанных примеров. –  Johan 26.09.2011, 18:26

Простой прием, если Вы хотите простой, портативный сценарий, должен начать рассчитывать в 10 001 и разделить начальную цифру.

for x in file.*.png; do
  n=${x%.*}; n=${n##*.}
  n=$((n + 10000))
  mv "$x" "${x%.*.*}.${n#1}.${x##*.}"
done

С zsh, с помощью zmv и l флаг расширения параметра:

setopt extended_glob
autoload zmv
zmv '(file).([0-9]##).(png)' '$1.${(l:4::0:)2}.$3'
5
27.01.2020, 20:21

Попробуйте следующее:

for f in *.png
do
   foo='0000'${f#file.} #remove "file." and prepend 0000
   foo=${foo:(-8)} #last eight characters
   echo mv $f file.$foo   
done

Удалите эхо, если Вы довольны выводом.

3
27.01.2020, 20:21
  • 1
    1, Если у Вас есть 5 или больше цифр как файл 11001.png, затем тот файл, станет файлом 1001.png, так как все имя файла получает 4 цифры с этим решением. примером frogstarr78:s с printf является лучшее. –  Johan 26.09.2011, 18:29
  • 2
    @Johan, который спрашивает вопрос, "Как я могу заполнить число к 4 цифрам?" Это - то, на что я ответил. Это, как предполагается, не работает на 5 или больше цифр. –  dogbane 26.09.2011, 20:01
  • 3
    Ваш ответ делает вид, отвечают на вопрос, но в вопросе также несколько... после файла 1001.png, который подразумевает, что могли быть более высокие числа. Если бы у Вас было примечание об этом пределе затем, то у меня не было бы downvoted. –  Johan 26.09.2011, 21:45

Если Вы имеете rename команда от пакета Perl (в противоположность тому от пакета util-linux):

rename 's/(\d+)/sprintf"%04d",$1/ge' file.*.png

Альтернатива на основе glenn jackman' комментарий, который предлагает портативное решение, включающее Perl. Поскольку Perl имеет свое собственное rename функция, больше нет потребности во внешнем mv:

ls -1 file.*.png | perl -ne 'chomp;($n=$_)=~s/(\d+)/sprintf"%04d",$1/ge;rename$_,$n'

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

ls -1 | perl -ne 'chomp;($n=$_)=~s/(\d+)/sprintf"%04d",$1/ge;rename$_,$n if$_ ne$n&&!-f$n'

С некоторой адаптацией решение цикла меньше может быть достигнуто даже с Sed:

ls -1 file.*.png | sed -r '/[0-9]{4}/d;h;:p;/[0-9]{4}/!s/([0-9]{1,3})/0\1/;tp;G;s/(.+)\n(.+)/mv \2 \1/' | sh
3
27.01.2020, 20:21
  • 1
    и если Вы не имеете, переименовывает, mv "$f" "$(perl -pe 's/(\d+)/sprintf"%04d",$1/ge' <<< "$f")" (принятие Вас использует удар), –  glenn jackman 26.09.2011, 16:39
  • 2
    @glennjackman Да, в этом случае вероятно, сделает задание. Но даст сообщения об ошибках для всех файлов, где число уже имеет 4 цифры и перезапишет существующие файлы. –  manatwork 26.09.2011, 17:09

Здесь уже существует довольно много ответов, но я думал, что подброшу простой

rename 'file.' 'file.000' file.?.png
rename 'file.' 'file.00' file.??.png
rename 'file.' 'file.0' file.???.png

rename утилита прибывает стандарт в каждый дистрибутив, о котором я знаю. Не столь необычный, как некоторые из других решений здесь, но простой легко помнить.

Первая строка берет file.1.png и преобразовывает его в file.0001.png.
Вторые преобразования file.10.png кому: file.0010.png, и третье делает file.100.png в файл 0100.png.
4 цифры уже сделаны.

2
27.01.2020, 20:21
  • 1
    Это не находится на Mac OS X, по крайней мере, не по умолчанию. –  Edward Falk 29.06.2016, 21:32
  • 2
    @EdwardFalk - это - часть util-linux так не, это не находится на Mac OS X. –  don_crissti 29.06.2016, 21:52

Теги

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