LINUX.ORG.RU

Написал скрипт

 


0

1

Привет! Возникла у меня потребность почистиь большую папку с изображениями от битых файлов. Вручную это делать долго. Но я обнаружил, что битые .jpg имеют существенно меньший объем чем даже самые низкокачественные целые файлы. И написал скрипт, удаляющий файлы меньше определенного значения.

#! /bin/bash
export IFS=$'\n'

list=`find $1 -name "*jpg" -size -25`
for i in $list
do
rm $i
done 

Покритикуйте :) Может, у кого-нибудь еще есть идеи, как фильтровать битые изображения.

Ответ на: комментарий от legolegs

Не может один бит быть бит, диск же контрольную сумму на каждый физический блок считает, а это сегодня 4кб

Всякое бывает, из-за ошибки в драйвере FS, ОС работает как вирус, прочитала не тот блок, поменяла «нужный» бит и перезаписала ваш jpg :)

Вы через некоторое время заметили, что с FS неладно, начали спасать, а информация то подпорчена :(

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от anonymous

Но мне не кажутся надежными способы по размеру и типу хекс-заголовков. Наверное лучше какую-нибудь утилиту а-ля медиаинфо, открыла, значит файл в норме, не открыла – удаляешь. Остальное детали условия, код возврата, && true || false или анализ stdout и stderr.

anonymous
()
Ответ на: комментарий от anonymous

открыла, значит файл в норме

Поврежденный jpeg открывется, в виде месива, но «нормальным» от этого не становится.

anonymous
()
Ответ на: комментарий от anonymous

Поврежденный jpeg открывется, в виде месива

Не всегда, но если открывается, то и не определишь поврежден он или нет. Если он соответствует типу файла (не по расширению), то его содержимое можно оценить только визуально – формально это полноценный файл, например jpeg, а фактически месиво.

anonymous
()

Вот, еще вариант:

#! /bin/bash
export IFS=$'\n'
export PATH=$PATH:/bin

list=`find $1 -name "*.jpg"`

for i in $list
do
if [ "`xxd -s -0x02 $i - | grep "0000"`" ]
then
rm $i
fi
done

Ваше мнение?

anti_win ★★
() автор топика
Ответ на: комментарий от anti_win

Заебись. Цвет букв красивый.

anonymous
()
Ответ на: комментарий от anonymous

Нет, задачу я уже решил. Этот скрипт я опробовал на копии той папки. Мне интересно с «научной» точки зрения

anti_win ★★
() автор топика
Ответ на: комментарий от anti_win

У меня все корректно

Добавь аргумент rm, чтоб без него только имена выводил, а с ним удалял. И желательно:

rm -fv "$i"
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.