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


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: [BASH] Выбрать картинки из папки.  (Прочитано 1386 раз)

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

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
[BASH] Выбрать картинки из папки.
« : 26 Февраля 2013, 05:01:25 »
Хочу выбрать все картинки из папки, как это сделать?

find -name ?
Как описать несколько расширений или мб есть способ получше?

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: [BASH] Выбрать картинки из папки.
« Ответ #1 : 26 Февраля 2013, 05:22:19 »
find -iname '*.jpg' -o -iname '*.png' ...
find -regextype posix-extended -iregex '.*\.(jpg|png|...)$'

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
Re: [BASH] Выбрать картинки из папки.
« Ответ #2 : 26 Февраля 2013, 05:24:08 »
ArcFi,
спасибо, 2-й вариант универсальный, заюзаю его.

Пользователь решил продолжить мысль 26 Февраля 2013, 05:56:41:
for FILE in $(find "$1" -type f -regextype posix-extended -iregex ".*\.(jpg|png|JPG|PNG)$")
do
echo "Converting $FILE"
#convert "$FILE" -resize "$2" -quality "$3" "$FILE"
done

Converting 24.02.2013/IMG_8066.JPG
Converting /mnt/data/temp/Золотой
Converting дракон
Converting 24.02.2013/IMG_8067.JPG
Converting /mnt/data/temp/Золотой
Converting дракон
Converting 24.02.2013/IMG_8078.JPG

Как побороть пробелы?
« Последнее редактирование: 26 Февраля 2013, 05:56:41 от ⚡ Thunde® ⚡ »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: [BASH] Выбрать картинки из папки.
« Ответ #3 : 26 Февраля 2013, 09:06:12 »
Кардинальное решение - это замена в названиях файлов пробелов на _.
Например, так.
cd mydir
rename 's/ /_/g' *            # пробелы в именах файлах заменить на '_'
По окончании операций можно произвести обратную операцию.
Второй способ - это замена разделителя (пробела) по умолчанию на что-то более оригинальное. Потом надо будет восстановить.
Третий способ - это кавычки и скобки. Но здесь нет общих решений.
Четвертый способ - изменение конструкций поиска. Уже увидел у ArcFi.
« Последнее редактирование: 26 Февраля 2013, 09:16:49 от alexander.pronin »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: [BASH] Выбрать картинки из папки.
« Ответ #4 : 26 Февраля 2013, 09:11:42 »
Как побороть пробелы?
Код: (bash) [Выделить]
find ... | while read FILE
do
...
done

Оффлайн easy2002

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2786
  • Мурманск
    • Просмотр профиля
Re: [BASH] Выбрать картинки из папки.
« Ответ #5 : 26 Февраля 2013, 10:02:22 »
Как побороть пробелы?
find path/ -regextype posix-extended -iregex '.*\.(jpg|png|...)$' -exec echo "Converting " {} \;
Tempora mutantur et nos mutantur in illis

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: [BASH] Выбрать картинки из папки.
« Ответ #6 : 26 Февраля 2013, 10:45:18 »
Если немного развить идею easy2002:
Код: (bash) [Выделить]
find ... -exec echo ... {} \; -exec convert ... {} {} \;

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: [BASH] Выбрать картинки из папки.
« Ответ #7 : 26 Февраля 2013, 11:33:51 »
Если немного развить идею easy2002:
Код: (bash) [Выделить]
find ... -exec echo ... {} \; -exec convert ... {} {} \;
Работает двойной exec. Не знал про такой фокус.

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6846
    • Просмотр профиля
Re: [BASH] Выбрать картинки из папки.
« Ответ #8 : 26 Февраля 2013, 11:56:32 »
Как побороть пробелы?
Код: (bash) [Выделить]
find ... | while read FILE
do
...
done
Заюзал этот вариант. Другие варианты мне не очень понятны.

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 630
    • Просмотр профиля
Re: [BASH] Выбрать картинки из папки.
« Ответ #9 : 26 Февраля 2013, 23:24:24 »
Еще пробелы можно побороть, если в find использовать -print0 (ноль). Обычно это идет в связке с xargs с параметром -0 (ноль), примерно так:
Код: (bash) [Выделить]
find . -iname "*jpg" -print0 | xargs -0 -I {} cp {} /куда/копировать/
Linux is only free if your time has no value (c) Jamie Zawinski

 

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