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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: BASH, find не видит путь для поиска  (Прочитано 884 раз)

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

Оффлайн Goosr

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
BASH, find не видит путь для поиска
« : 15 Октября 2015, 10:41:09 »
Доброго времени суток.
Есть вот такой тестовый скриптик для поиска картинок в папке с текущей датой
(Нажмите, чтобы показать/скрыть)
В итоге получается, что find ищет изображения не в папке с текущей датой, а целиком в папке Изображения или Картинки. Т.е. он у себя в пути find $pth/$date игнорирует дату.

Подскажите, где сидит ошибка.

Пользователь решил продолжить мысль [time]15 Октябрь 2015, 10:46:33[/time]:
Сам увидел, переменну задаю date а в пути пишу data
« Последнее редактирование: 15 Октября 2015, 12:15:12 от Azure »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: BASH, find не видит путь для поиска
« Ответ #1 : 15 Октября 2015, 13:00:54 »
  • Не стоит давать имена аналогичные существующим функциям
  • Пути стоит заключать в кавычки
  • Если нет вложенных папок — нет необходимости использовать find
  • mkdir стоит использовать с параметром -p
  • если число в имени одно, то можно обойтись без head
Код: (bash) [Выделить]
#!/bin/bash

unset number
my_date=$(date +%F)
my_path=$(xdg-user-dir PICTURES)

if [ -d "$my_path/$my_date/" ]
then
    read number < <(ls -rv "$my_path/$my_date/"scan*.jpg)
else
    mkdir -p "$my_path/$my_date/"
fi
number=$((${number//[!0-9]/}+1))
touch "$my_path/$my_date/$(printf "Scan%02d.jpg" $name)"
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Goosr

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: BASH, find не видит путь для поиска
« Ответ #2 : 16 Октября 2015, 10:29:26 »
number=$((${number//[!0-9]/}+1)) отдает дату вида 2015101602

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: BASH, find не видит путь для поиска
« Ответ #3 : 16 Октября 2015, 10:46:36 »
Goosr,
Тут два варианта
  • удалить дату из number добавив после fi : number=${number##*/[Ss]can}
  • перейти в папку $my_path/$my_date/ : cd "$my_path/$my_date/" ; read number < <(ls -rv [Ss]can*.jpg) ; cd -
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Goosr

  • Автор темы
  • Новичок
  • *
  • Сообщений: 26
    • Просмотр профиля
Re: BASH, find не видит путь для поиска
« Ответ #4 : 16 Октября 2015, 12:16:57 »
Работает в таком виде.

(Нажмите, чтобы показать/скрыть)

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: BASH, find не видит путь для поиска
« Ответ #5 : 16 Октября 2015, 12:41:11 »
Goosr,
Не надо плодить сущностей сверх необходимого. Последовательного выполнения было бы достаточно
Код: (bash) [Выделить]
cd "$my_path/$my_date"
read number < <(ls -rv [Ss]can*.jpg)
cd -
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

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