Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Помогите разобраться со скриптом.  (Прочитано 879 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Глупый_Мо

  • Автор темы
  • Гость
#!/bin/bash
cd "$1" # Переходим в заданный каьалог
SPISOK_FILE=$(find . -name "*.$2" -exec basename {} \;) # Ищем файлы с заданным
                                                        # расширением
echo "$SPISOK_FILE" | while read fname; do # Берем каждый файл из списка
                                           # $SPISOK_FILE
echo mv $fname ${fname/ .$2/ .$3/} # Переименовываем
done

Скрипт должен переименовывать файлы (т.е. менять расширение файлов). Первый параметр-это каталог, второй-какие расширения нужно поменять, третий-на что менять.

При запуске
./script.sh . txt jpg
выдает:
vlad@vlad-sys:~/Shell/Izmenenie_suffiksov$ ./script.sh . txt jpg
mv 2.txt 2.txt
mv 1.txt 1.txt
mv 3.txt 3.txt

Помогите, подскажите где ошибка?
« Последнее редактирование: 15 Июня 2014, 13:03:11 от Izamoo »

Оффлайн JmAbuDabi

  • Старожил
  • *
  • Сообщений: 2468
  • 나는 빅터 해요. 나는 프로그래머입니다
    • Просмотр профиля
Re: Помогите разобраться со скриптом.
« Ответ #1 : 15 Июня 2014, 13:12:50 »
echo mv $fname ${fname/.$2/.$3}
Покой – это не место, где тихо и мирно, где нет шума и беспокойства.
Покой – это когда при всем этом, вы сохраняете мир и спокойствие в своем сердце.

Оффлайн andwer07

  • Участник
  • *
  • Сообщений: 233
    • Просмотр профиля
Re: Помогите разобраться со скриптом.
« Ответ #2 : 15 Июня 2014, 13:19:50 »
#!/bin/bash
cd "$1"
for fname in *.$2; do
  mv $fname ${fname/.$2/.$3}
done

Глупый_Мо

  • Автор темы
  • Гость
Re: Помогите разобраться со скриптом.
« Ответ #3 : 15 Июня 2014, 13:32:10 »
echo mv $fname ${fname/.$2/.$3}
Я понимаю что тут ошибка, почему не работает. Если вы из-за echo, то это специально, для того что бы увидеть команду переименования.

Пользователь решил продолжить мысль 15 Июня 2014, 13:35:25:
#!/bin/bash
cd "$1"
for fname in *.$2; do
  mv $fname ${fname/.$2/.$3}
done

Почему у вас работает а у меня нет, где ошибка?
« Последнее редактирование: 15 Июня 2014, 13:35:25 от Izamoo »

Krjd

  • Автор темы
  • Гость
Re: Помогите разобраться со скриптом.
« Ответ #4 : 15 Июня 2014, 13:35:57 »
Izamoo,
вам написали рабочую строчку, видимо проблема в пробелах

Глупый_Мо

  • Автор темы
  • Гость
Re: Помогите разобраться со скриптом.
« Ответ #5 : 15 Июня 2014, 13:37:12 »
Izamoo,
вам написали рабочую строчку, видимо проблема в пробелах

Щас попробую пошаманить с пробелами.

Krjd

  • Автор темы
  • Гость
Re: Помогите разобраться со скриптом.
« Ответ #6 : 15 Июня 2014, 13:38:18 »
и еще у вашего варианта есть отличие от
#!/bin/bash
cd "$1"
for fname in *.$2; do
  mv $fname ${fname/.$2/.$3}
done
у вас будут еще проверятся подкаталоги, но поскольку вы выполняете -exec basename команда echo mv $fname ${fname/.$2/.$3} не будет находить файлы, которые лежат в подкаталогах

Глупый_Мо

  • Автор темы
  • Гость
Re: Помогите разобраться со скриптом.
« Ответ #7 : 15 Июня 2014, 13:38:47 »
D101101,
Спасибо огромное, действительно дело было в пробелах.

Пользователь решил продолжить мысль 15 Июня 2014, 13:39:08:
и еще у вашего варианта есть отличие от
#!/bin/bash
cd "$1"
for fname in *.$2; do
  mv $fname ${fname/.$2/.$3}
done
у вас будут еще проверятся подкаталоги, но поскольку вы выполняете -exec basename команда echo mv $fname ${fname/.$2/.$3} не будет находить файлы

Это я уже понял, исправлю.

Оффлайн JmAbuDabi

  • Старожил
  • *
  • Сообщений: 2468
  • 나는 빅터 해요. 나는 프로그래머입니다
    • Просмотр профиля
Re: Помогите разобраться со скриптом.
« Ответ #8 : 15 Июня 2014, 13:40:43 »
И лучше все имена в кавычки взять ради пробелов и прочих "нестандартных" символов.
Покой – это не место, где тихо и мирно, где нет шума и беспокойства.
Покой – это когда при всем этом, вы сохраняете мир и спокойствие в своем сердце.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Помогите разобраться со скриптом.
« Ответ #9 : 15 Июня 2014, 13:50:58 »
cd "$1" || exit 1
Wars ~.o

Глупый_Мо

  • Автор темы
  • Гость
Re: Помогите разобраться со скриптом.
« Ответ #10 : 15 Июня 2014, 13:53:15 »
cd "$1" || exit 1

Это проверка существования каталога? Если его нет, завершаем работу с кодом возврата 1? Я правильно понял?

Ой нет, если не задан 1 параметр, то выходим?

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Помогите разобраться со скриптом.
« Ответ #11 : 15 Июня 2014, 13:57:03 »
Izamoo,
ты сам, не знаю.
Wars ~.o

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Помогите разобраться со скриптом.
« Ответ #12 : 15 Июня 2014, 14:04:45 »
Надеюсь, ТС в курсе про существование утилиты rename.

Глупый_Мо

  • Автор темы
  • Гость
Re: Помогите разобраться со скриптом.
« Ответ #13 : 15 Июня 2014, 14:08:46 »
Надеюсь, ТС в курсе про существование утилиты rename.

слышал, но никогда не использовал.

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.