Поместите другую команду там для еды сигнала из программы смерти.
Я попробовал Ваш пример, initally как показано, чтобы доказать, что проблема... 'killall сон' уничтожает спящий процесс, удар прерываний и выходы xargs.
Как тест, я придерживался 'выполненный другая команда' команда типа промежуточный xargs и удар... в этом случае '/usr/bin/time'. на этот раз (никакая игра слов), killall сон уничтожает спящий процесс, но xargs продвигается.
Вы передали бы вывод времени по каналу к/dev/null, и это сделает точно, что Вы ищете без майора, переписывают Вашего существующего процесса.
Я воображаю, обдумываю ли я на мгновение, я мог бы придумать другую программу, чтобы сделать то же без болтовни stderr от '/usr/bin/time'. Или даже запишите тот самостоятельно, это - просто 'ветвление' (или должностное лицо () производная).
Не забудьте использовать '/usr/bin/time', поскольку я не уверен, что встроенное 'время' от удара сделает ту же 'еду' сигнала.
найденный решением: identify
, часть imagemagick пакета, делает точно, в чем я нуждаюсь
$ identify color.jpg
> color.jpg JPEG 1980x650 1980x650+0+0 8-bit DirectClass 231KB 0.000u 0:00.000
можно просто использовать команду "файл" для получения информаций, в которых Вы нуждаетесь:
~# file cha_2.png
cha_2.png: PNG image data, 656 x 464, 8-bit/color RGB, non-interlaced
file taylor-swift-money-makers-990.jpg
-> taylor-swift-money-makers-990.jpg: JPEG image data, JFIF standard 1.01, comment: "CREATOR: gd-jpeg v1.0 (using IJ"
– alex gray
09.10.2014, 20:48
Оба display
и file
являются довольно медленными, и имеют потенциал для обеспечения даже довольно способных систем к их коленям, имеющим дело со многими несколько файлов. Маленький тест:
$ du -h *.png --total | tail -n 1
9.2M total
$ ls -l *.png | wc -l
107
$ /usr/bin/time file *.png
--> 0.37user 0.26system 0:06.93elapsed 9%CPU (0avgtext+0avgdata 37232maxresident)k
22624inputs+0outputs (9major+2883minor)pagefaults 0swaps
$ /usr/bin/time identify *.png
--> 0.56user 0.22system 0:06.77elapsed 11%CPU (0avgtext+0avgdata 25648maxresident)k
34256inputs+0outputs (119major+2115minor)pagefaults 0swaps
Путем чтения только необходимых байтов, может быть значительно ускорена эта операция.
$ /usr/bin/time ./pngsize *.png
--> 0.00user 0.00system 0:00.03elapsed 12%CPU (0avgtext+0avgdata 1904maxresident)k
0inputs+0outputs (0major+160minor)pagefaults 0swaps
Вот pngsize:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <err.h>
#define oops(syscall) { printf("error processing %s: ", argv[i]); \
fflush(0); perror(syscall"()"); continue; }
int main(int argc, char **argv) {
int fd, i;
uint32_t h, w;
if (argc < 2) { printf("%s <pngfile> [pngfile ...]\n", argv[0]); exit(0); }
for (i = 1; i < argc; i++) {
if (argc > 2) printf("%s: ", argv[i]);
if ((fd = open(argv[i], O_RDONLY)) == -1) oops("open");
if (lseek(fd, 16, SEEK_SET) == -1) oops("lseek");
if (read(fd, &w, 4) < 1) oops("read");
if (read(fd, &h, 4) < 1) oops("read");
printf("%dx%d\n", htonl(w), htonl(h));
if (close(fd) == -1) oops("close");
}
return 0;
}
Этот метод намного быстрее, чем пользование библиотекой, которая загружает PNG вперед, назад и боком только получить размер изображения :P (Рассмотрите код тщательно прежде, чем подать его каталог, полный произвольного PNGs, конечно.)
Код использует inet.h для htonl () к de-endian-ize порядок байтов заголовка.
Использование Определите
, чтобы увидеть размеры:
$ identify color.jpg
> color.jpg JPEG 1980x650 1980x650+0+0 8-bit DirectClass 231KB 0.000u 0:00.000
значение извлечения через Cut | SED
, из поля 3:
identify ./color.jpg | cut -f 3 -d " " | sed s/x.*// #width
identify ./color.jpg | cut -f 3 -d " " | sed s/.*x// #height
Asign для переменной:
W=`identify ./color.jpg | cut -f 3 -d " " | sed s/x.*//` #width
H=`identify ./color.jpg | cut -f 3 -d " " | sed s/.*x//` #height
echo $W
> 1980
echo $H
> 650
Также можно попробовать GraphicsMagick, которая является хорошо поддерживаемой вилкой ImageMagick, используемой, например, на Flickr и Etsy:
$ gm identify a.jpg
a.jpg JPEG 480x309+0+0 DirectClass 8-bit 25.2K 0.000u 0:01
Это быстрее, чем идентификация ImageMagick (в моих тестах около двух раз).
ls * info *
Здесь должны быть перечислены все файлы в этом каталоге, которые имеют info в любом месте своего имени.
-121--174238-Я смог запустить его с неофициальным хранилищем yum, которое было опубликовано здесь: https://copr.fedoraproject.org/coprs/admiralnemo/i3wm-el7 . На этой странице содержатся хорошие инструкции.
-121--186609- Вместо анализа выходных данных идентифицируйте
по глазу или по текстовым утилитам, можно использовать опцию -формат
для вывода ширины и высоты в любом формате, который лучше всего подходит для вас. Например:
$ identify -format '%w %h' img.png
100 200
$ identify -format '%wx%h' img.png
100x200
Список свойств изображения, которые вы можете вывести, можно найти на этой странице , но для вопроса здесь, кажется, все, что вам нужно, это % w
и % h
, которые дают ширину и высоту изображения, соответственно, в пикселях.
Гибкость, обеспечиваемая -форматом
, пригодилась мне при поиске самых больших изображений в пикселях, выводе % [fx: w * h]
для нескольких изображений и сортировке выходных данных.
Вы можете указать опцию -ping
, если вы обрабатываете много изображений, используя более сложные переходы, и хотите убедиться, что программа не тратит время на загрузку всех изображений. При использовании простых переходов значение по умолчанию должно быть -ping
. Дополнительную информацию о выборе между -ping
и + ping
можно найти здесь .
Это был полезный фрагмент (я не писал), который возвращает размеры для каждого png и jpg в папке:
file ./* | perl -ne '@m = /^.*.jpg|^.*.png|[0-9][0-9]*[ ]?x[ ]?[0-9][0-9]*/g; print "@m\n"'
Для таких, как я, которым нужен размер в мегапикселях:
perl -le "printf \"=> fileName = %s size = %.2f Mpix\n\", \"$fileName\", $(identify -format '%w*%h/10**6' $fileName)"