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


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

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

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

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

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3474
  • 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)

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

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3474
  • nix - вот оно счастье...
    • Просмотр профиля
Код: Bash
  1. array=`ls /home/user/tmp | grep -E "*.tif"`
  2.  
  3. for i in $array;
  4. do
  5.    size=`du -s $i`
  6.    if [ $size -qt 1000 ]; then
  7.       # тут уже пиши как тебе сконвертировать
  8.    fi
  9. done
  10.  

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

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5630
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Код: Bash
  1. find /home/user/tmp/ -name "*.tif" -size +1k -print0 |
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн necromantix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Код: Bash
  1. 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

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Код: Bash
  1. find| while read FILE ; do … ; done

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5630
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Я бы назвал тогда не PATH а, например LIST
Код: Bash
  1. for file in "$LIST"
  2. do
  3.   if [ -f "$file" ]
  4.   then
  5.     mogrify -format jpg -quality 80 "$file"
  6.   else
  7.     echo "Wrong path or filename for $file"
  8.   fi
  9. done
И убрал бы -print0 из find на всякий…
« Последнее редактирование: 15 Август 2014, 17:08:44 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

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