sh - добавление нулей к именам файлов в соответствии с максимальным - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь сделать сортировщик файлов.В текущем каталоге у меня есть файлы с такими именами:

info-0.jpg
info-12.jpg
info-40.jpg
info-5.jpg
info-100.jpg

Я хочу, чтобы он стал

info-000.jpg
info-012.jpg
info-040.jpg
info-005.jpg
info-100.jpg

То есть, добавьте 0, чтобы количество цифр было равно 3,поскольку максимальное число было 100 и имело 3 цифры.

Я хотел бы использовать cut и wc, выполняя цикл для каждого из имен файлов, если $1 равно "info", for i in $1-*.jpg, нокак.Спасибо

Я сделал это, чтобы начать, но получил синтаксическую ошибку

wcount=0

for i in $filename-*.jpg; do                                                    
       wcount=$((echo $i | wc -c))                                                 
  done 

1 Ответ

0 голосов
/ 23 сентября 2019
for f in info*.jpg ; do
  numPart=${f%.*} ; #dbg echo numPart1=$numPart;
  numPart=${numPart#*-}; #dbg echo numPart2=$numPart;
  newFilename="${f%-*}"-$(printf '%03d' "$numPart")."${f##*.}"
  echo /bin/mv "$f" "$newFilename"
done

Клавиша использует printf с форматированием, которое увеличивает ширину до 3 цифр и включает в себя 0 заполнение;printf "%03d" "$numPart" часть скрипта.

Также синтаксис ${f%.*} представляет собой набор функций, предлагаемых современными оболочками для удаления частей значения переменной, где % означает совпадение (и уничтожение) минимальногосовпадение с правой стороны значения, а ${numPart#*-} означает совпадение (и уничтожение) минимального совпадения с левой стороны значения.Также есть %% (максимальное совпадение справа) и ## (максимальное совпадение слева).Поэкспериментируйте с переменной в командной строке, чтобы освоиться с этим.

Трижды проверьте вывод этого кода в вашей среде и только тогда, когда все команды mv выглядят правильно, удалите echo перед /bin/mv.

Если вы получилисообщение об ошибке типа Can't find /bin/mv, затем введите type mv и замените /bin/ на любой путь, возвращаемый для mv.

IHTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...