Я уже нашел ответ, который перечисляет в значительной степени все. Кроме я не могу заставить это работать.
Я использую:
find . -iname "*.jpg" -type f | xargs -I{} identify -format '%w %h %i' {} | awk '$1<300 || $2<300{print $3}'
Что необходимо для удаления выходных файлов?
Я пытался добавить | комната в конце, но ошибка показывает, что я пропускаю операнд. Я хочу, чтобы все файлы что код выше печати были удалены.
Может кто-то помогать
Необходимо быть в состоянии использовать rm $(find...$3}')
.
, Другими словами, оберните вышеупомянутую команду в круглых скобках в $ () для использования результатов в качестве аргумента rm
.
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"))
(( ))
сделать сравнениеСледующие работы и очень быстры. Сохраните к ~/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
выполненный с максимальной суммой возможной параллельности. См. его страницу справочника для деталей.