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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Поиск, проверка, конвертировае и удаление файлов  (Прочитано 905 раз)

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

Оффлайн necromantix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Привет всем! Нужна помощь, излагаю задачу:
Есть сетевое хранилище, в нем куча папок и файлов, есть не пережатые tif файлы там, их нужно пережать в jpg и удалить оригиналы. Написал я скрипт в одну строку, но нужно выполнить проверку на размер tif файла, может быть в дальнейшем и цвет(ч/б или цветной), вот мой скрипт и он рабочий:

find /home/user/tmp/ -name "*.tif" -print0 | xargs -0 mogrify -format jpg *.tif -quality 80; find /home/user/tmp/ -name "*.tif" -print0 | xargs -0 rm *.tif
Придумал я как выполнить проверку файла, вот код:
#!/bin/bash
L=1000
S=`du -s *.tif | head -n1 | awk '{print $1}'`
echo $L
echo $S
if [ "$S" -gt "$L" ]
then
        mogrify -format jpg *.tif -quality 80
else
        echo "Не нужно пережимать"
fi

Вот только не знаю, как пути до файлов с проверкой реализовать...опыта не хватает :-\

Оффлайн zotkindm

  • Старожил
  • *
  • Сообщений: 2452
  • (K)Ub 14.04
    • Просмотр профиля
Из адресной строки наутилуса скопируй.

Оффлайн necromantix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Не не вариант, сервер где файлы там нет GUI

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
какую конкретно проверку пути ты хочешь?
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн necromantix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
find /home/user/tmp/ -name "*.tif" -print0 | xargs -0 mogrify -format jpg *.tif -quality 80; find /home/user/tmp/ -name "*.tif" -print0 | xargs -0 rm *.tifКоманда find ищет по пути /home/user/tmp/ файлы с именем *.tif и выводит их на экран -print0 далее выполняется xargs -0 который передает пути к файлам как я понял mogrify который в свою очередь по маске конвертирует из tif в jpg с качеством 80% далее идет поиск tif файлов и удаление их (удаление оригиналов)

Нужно засунуть проверку размера файла прежде чем его начать конвертировать, если размер до 1000 оставить если больше конвертировать. Как то так)) с ума можно сойти  8)

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
Код: (bash) [Выделить]
array=`ls /home/user/tmp | grep -E "*.tif"`

for i in $array;
do
   size=`du -s $i`
   if [ $size -qt 1000 ]; then
      # тут уже пиши как тебе сконвертировать
   fi
done

поидее будет работать, условие if сработает если файл больше мегабайта.
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Код: (bash) [Выделить]
find /home/user/tmp/ -name "*.tif" -size +1k -print0 | …
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн necromantix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Код: (bash) [Выделить]
find /home/user/tmp/ -name "*.tif" -size +1k -print0 | …

Огромное спасибо! я тоже думал на тем что нужно смотреть в сторону команды find.

Пользователь решил продолжить мысль [time]14 Август 2014, 10:10:28[/time]:
Немного передал код
#!/bin/bash

echo -n "Enter the minimum size of the TIF file > "
read miniS
echo -n "Enter the maximum file size TIF > "
read maxS
MINISIZE=${miniS}k
MAXSIZE=${maxS}k
PATH=$(find /home/sv1ker/tmp/ -name "*.tif" -size +$MINISIZE -and -size -$MAXSIZE -print0)

теперь вот думаю как передать переменную $PATH коду:
mogrify -format jpg *.tif -quality 80
« Последнее редактирование: 14 Августа 2014, 10:11:36 от necromantix »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Код: (bash) [Выделить]
find … | while read FILE ; do … ; done

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Я бы назвал тогда не PATH а, например LIST
Код: (bash) [Выделить]
for file in "$LIST"
do
  if [ -f "$file" ]
  then
    mogrify -format jpg -quality 80 "$file"
  else
    echo "Wrong path or filename for $file"
  fi
done
И убрал бы -print0 из find на всякий…
« Последнее редактирование: 15 Августа 2014, 17:08:44 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

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