LINUX.ORG.RU
решено ФорумAdmin

Пособите со скриптом пжлст. Рекурсивное переименование

 , ,


0

1

День добрый, Надо в куче подкаталогов найти файлы и переименовать их. Нарисовал скрипт, но что-то в нём не так:

#/bin/sh for d in *; do if [ -d $d ]; then (cd $d; rename 's/\.jpeg$/.jpg/' * ; rename 's/\.JPG$/.jpg/' * ;) rename 's/\.jpeg$/.jpg/' * ; rename 's/\.JPG$/.jpg/' * fi done

выдаёт кучу ошибок вида /home/grigory/bin/fixnames.sh: строка 3: [: слишком много аргументов или /home/grigory/filename: ожидается использование бинарного оператора

Что поправить ? Спасибо.

#!/bin/bash

IFS=$'\n'
ORIG="$(pwd)"

find . -type d | while read line; do
     if [ -d "$line" ]; then 
         cd $line
         rename 's/\.JPG$/\.jpg/' *
         rename 's/\.JPEG$/\.jpg/' *
         cd "$ORIG"
     else
         echo "$line -- не директория. пропускаем."
     fi
done 
snoopcat ★★★★★ ()
Последнее исправление: snoopcat (всего исправлений: 4)
shopt -s globstar
rename 's/jp.?g/jpg/i' **
Minoru ★★★ ()

#/bin/sh for d in *; do if [ -d $d ]; then (cd $d; rename 's/\.jpeg$/.jpg/' * ; rename 's/\.JPG$/.jpg/' * ;) rename 's/\.jpeg$/.jpg/' * ; rename 's/\.JPG$/.jpg/' * fi done

это не скрипт, а говно.

Что поправить ? Спасибо.

ошибка в коде ДНК. Всегда ваша, зелёная поняша.

anonymous ()
Ответ на: комментарий от lazyklimm

2 lazyklimm Спасибо! Но ваша версия, похоже, на русских именах спотыкается. Нет, говорит, такого файла или каталога. Где-то кавычки или \ поставить ?

gregg128 ()

Всем большое спасибо!

Кроме анонимуса одного, снобирующего кретина. Это не моя профессия, ламаркист херов! Слово ДНК выучил, ха-ха! Теперь ещё выучи, что оно означает и что от неё зависит.

gregg128 ()
Ответ на: комментарий от gregg128

Но ваша версия, похоже, на русских именах спотыкается

Скорее, не на русских, а на именах с пробелами. Попробуй

find . -name "*.JP*G" -type f -exec rename -v 's/\.[^\.]+$/.jpg/' '{}' +

dexpl ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.