как удалить файлы изображений, которые меньше, чем определенные размеры

Я уже нашел ответ, который перечисляет в значительной степени все. Кроме я не могу заставить это работать.

Я использую:

find . -iname "*.jpg" -type f | xargs -I{} identify -format '%w %h %i' {} | awk '$1<300 || $2<300{print $3}'

Что необходимо для удаления выходных файлов?
Я пытался добавить | комната в конце, но ошибка показывает, что я пропускаю операнд. Я хочу, чтобы все файлы что код выше печати были удалены.

Может кто-то помогать

2
задан 27 January 2019 в 19:13

3 ответа

Необходимо быть в состоянии использовать rm $(find...$3}').

, Другими словами, оберните вышеупомянутую команду в круглых скобках в $ () для использования результатов в качестве аргумента rm.

0
ответ дан 2 December 2019 в 05:09

rm не читает имена файлов из входа. Можно, вероятно, сделать:

find . -iname "*.jpg" -type f -exec bash -c 'for i; do size=($(identify -format "%w %h" "$i")); (( size[1] < 300 || size[2] < 300 )) && rm -v "$i"' remove-files {} +
  • Можно использовать -exec вместо xargs.

Команда удара:

for i
do
    size=($(identify -format "%w %h" "$i"))
    (( size[1] < 300 || size[2] < 300 )) && rm -v "$i"
done
  • циклы по всем входным параметрам (for i)
  • получает размер и хранит его в массиве (вот почему вокруг существуют круглые скобки $(): ($(identify -format "%w %h" "$i"))
  • использование окружает арифметику (( )) сделать сравнение
1
ответ дан 2 December 2019 в 05:09

Следующие работы и очень быстры. Сохраните к ~/checksize.sh и сделайте его исполняемым файлом с chmod (chmod +x ~/checksize.sh)

#! /bin/bash

#find . -type f -exec bash -c ~/checksize.sh ;
echo ${@}
if [ -z "$1" ]
then
    echo "\$1 empty" >&2
    exit
fi

size=($(identify -format "%w %h" "$1" | tr -d "()"))
#echo ${size[@]}
#echo ${size[0]}
#echo ${size[1]}
if [ ${size[0]} -lt 300 -a ${size[1]} -lt 300 ]
then
    rm -v "$1"
fi

Затем измените каталог в каталог, Вы хотите удалить файлы, которые являются слишком маленькими от.

После cd'ing в каталог, запущенный следующее: find . -type f | xargs -P 0 -L 1 ~/checksize.sh

Это работает быстро, потому что это использует-P xarg 0, который делает xarg выполненный с максимальной суммой возможной параллельности. См. его страницу справочника для деталей.

0
ответ дан 2 December 2019 в 05:09

Другие вопросы по тегам:

Похожие вопросы: