dd
инициированный уничтожитель OOM, который, в свою очередь, уничтожил процесс с самым высоким счетом OOM.
Вы в значительной степени пытаетесь переосмыслить tar или подобные форматы архивации; не ожидайте делать вещи вручную для EA, чем использование существующих инструментов.
Если Вы настаиваете на пользовательской границе (который опасен, поскольку эта граница могла появиться естественно в одном из jpeg файлов), заставьте его запуститься и закончитесь новой строкой. Это упростит обработку с awk
.
Я рекомендую разделить каждый файл, но ограничить количество файлов на каталог к достаточно маленькому количеству, которое не вызывает хит производительности. С одним файлом каждые 5 секунд, вложенная структура дня/часа/минуты дает максимальное ветвление 366/60/20, который должен быть в порядке мудр производительностью.
Если Вы хотите использовать архивы, и, учитывая отсутствие r
команда в tar Busybox, Вы могли хранить файлы N в файловой системе, затем периодически сделать архив с существующими файлами и убрать большой список. Например, для создания архива каждыми 100 файлами:
set -- *
if [ $# -gt 100 ]; then
set ../archives/*.tar
eval "last=\${$#}"
last=${last%[!0-9]}; last=${last##[!0-9]}
tar cf ../archives/$((last+1)).tar -- *
rm -- *
fi
Если можно запустить, просто используйте tar
. Это имеет, "добавляют режим" с r
опция:
$ ls t.tar
ls: cannot access t.tar: No such file or directory
$ tar rvf t.tar t.c
t.c
$ tar rvf t.tar t.cpp
t.cpp
$ tar tf t.tar
t.c
t.cpp
(Как Вы видите, файл tar не должен существовать для использования добавлять режима, таким образом, это должно быть действительно просто в использовании для случая.)
Если у Вас нет роскоши полной реализации tar GNU, awk
должен смочь уладить Ваш объединенный файл с чем-то как (взятый из этого сообщения Переполнения стека):
awk -vRS="--myboundary" '{ print $0 > NR".jpg" }' yourfile
Это создаст названные файлы 1.jpg
, 2.jpg
, и т.д. проблема: это добавляет случайное \n
в конце файла.
Принятие Вас имеет truncate
и stat
в Вашей среде можно согласовать те файлы с:
truncate -s $(( $(stat -c %s 1.jpg) - 1 )) 1.jpg
Если Вы не имеете stat
, Вам будет нужно что-то еще для выяснения имени файла (анализирующий вывод ls
мог бы быть в порядке при этом обстоятельстве, так как Вы знаете, что имена файлов нормальны). Если Вы не имеете truncate
, можно добиться цели с dd
, или возможно с head
или tail
.
Или можно проигнорировать запаздывание \n
, возможности хороши, изображения отобразятся правильно независимо.
Демонстрация:
$ cp orig.1.png blob
$ echo -n "HELLOHELLO" >> blob
$ cat orig.2.png >> blob
$ ls -l
total 36
-rw-r--r-- 1 test test 14916 Dec 30 19:42 blob
-rw-r--r-- 1 test test 5735 Dec 30 19:41 orig.1.png
-rw-r--r-- 1 test test 9171 Dec 30 19:41 orig.2.png
$ awk -vRS="HELLOHELLO" '{print $0 > "new."NR".png"}' blob
$ ls -l
total 56
-rw-r--r-- 1 test test 14916 Dec 30 19:42 blob
-rw-r--r-- 1 test test 5736 Dec 30 19:43 new.1.png
-rw-r--r-- 1 test test 9172 Dec 30 19:43 new.2.png
-rw-r--r-- 1 test test 5735 Dec 30 19:41 orig.1.png
-rw-r--r-- 1 test test 9171 Dec 30 19:41 orig.2.png
$ for i in new* ; do truncate -s $(( $(stat -c %s $i) - 1 )) $i ; done
$ ls -l
total 56
-rw-r--r-- 1 test test 14916 Dec 30 19:42 blob
-rw-r--r-- 1 test test 5735 Dec 30 19:43 new.1.png
-rw-r--r-- 1 test test 9171 Dec 30 19:43 new.2.png
-rw-r--r-- 1 test test 5735 Dec 30 19:41 orig.1.png
-rw-r--r-- 1 test test 9171 Dec 30 19:41 orig.2.png
$ md5sum *.png
70718d7b9e717206b4a8455ea32b51ed new.1.png
531099b9527f5fc2b623a3f724573ea9 new.2.png
70718d7b9e717206b4a8455ea32b51ed orig.1.png
531099b9527f5fc2b623a3f724573ea9 orig.2.png