Который cp
Вы используете? Инструменты UNIX являются видом подобных среди различных систем, но могут вести себя по-другому в некоторых ситуациях.
GNU cp
имеет поведение, которое Вы хотите. BSD cp
имеет поведение, которое Вы описываете. Попытайтесь удалить наклонную черту с первого аргумента и записать:
cp -R /parentFolder/folder2 /parentFolder/folder1/folder1.1
вместо:
cp -R /parentFolder/folder2/ /parentFolder/folder1/folder1.1
Согласно Википедии (1), это то, как BSD cp
делает то, что Вы хотите.
Вы попробовали netpbm инструменты? Это будет работать с R8G8B8 и другими 8-разрядными заказами RGB.
Для ширины 100 высот 200 файлов сырых данных порядка RGB:
rawtoppm -rgb 100 200 input.rgb > image.ppm
ppmtorgb3 image.ppm
Вы будете теперь иметь 3 pgm
файлы серой карты формата, каждый снабженный суффиксом .red
.grn
и .blu
. Они .pgm
файлы являются почти необработанным двоичным форматом, за исключением короткого заголовка, таким образом:
tail +4 image.red > image_r.raw
tail +4 image.grn > image_g.raw
tail +4 image.blu > image_b.raw
если Вы действительно хотите необработанные каналы как этот. Или, для последующей обработки:
pgmtoppm red image.red > image_red.ppm
pgmtoppm green image.grn > image_grn.ppm
pgmtoppm blue image.blu > image_blue.ppm
Вы теперь имеете три ppm
файлы формата, которые являются разделенными каналами RGB (см. также rgb3toppm
). Они могут быть преобразованием в другое использование форматов ppmtoX
, например. ppmtopng
. Используйте"white
"вместо цвета в 2-м параметре для отъезда каждого как шкалы полутонов.
Imagemagick convert
может также быть также полезным, это обработает RGB, RGBA и 16-разрядные форматы .raw также, и это имеет a -separate
опция разделить каналы.
for ch in R G B; do
convert -set colorspace RGB -size 100x200 -depth 8 rgb:image.rgb \
-channel ${ch} -separate -depth 8 gray:image_${ch}.raw
done
Проверьте что -set colorspace
вариант подходит для Вашего входа. Более новые версии позволяют Вам сделать это в единственной команде, видеть http://www.imagemagick.org/Usage/color_basics
convert ... -channel RGB -separate gray:image_%d.raw
и R/G/B будет записан в image_0.raw image_1.raw image_2.raw
файлы
convert
команда была обновлена на основе справки и обратной связи от Stephane Chazelas, было несколько изменений в поведении цветового пространства от ImageMagic-6.7.7, которые вызывают проблемы из-за (я верю), sRGB используемый вместо RGB. # colorspace changes mean this works differently after ImageMagick-6.7.6
convert -size 100x200 -depth 8 rgb:image.rgb \
-channel ${ch} -separate -depth 8 gray:image_${ch}.raw
С ksh93 можно сделать:
command /opt/ast/bin/cut -r3 -Nb1 < file > red
command /opt/ast/bin/cut -r3 -Nb2 < file > green
command /opt/ast/bin/cut -r3 -Nb3 < file > blue
(да, я знаю, существует нет /opt/ast/bin/cut
в Вашей системе, но возможностях ksh93
все еще имеет встроенное для него).
С perl
:
perl -F -ane '
BEGIN{
$/=\3;
map {open $f[$n++], ">", $_} qw{red green blue}
}
for $i (0..2) {print {$f[$i]} $F[$i]}'
Только со стандартными инструментами Unix можно сделать:
od -vAn -tu1 < file |
tr -cs 0-9 '[\n*]' |
grep . |
paste - - - |
awk '{printf "%c", $1 > "red"
printf "%c", $2 > "green"
printf "%c", $3 > "blue"}'
Они разделили бы a 123123123123
"файл" в a 1111
"красный", 2222
"зеленый" и 3333
"синий". Если вместо этого Вы хотите "красный" файл, который имеет 100100100100
, это - все еще файл RGB, но где другие цвета были подавлены, необходимо будет адаптировать код выше для вывода дополнительных байтов NUL для других цветов, или Вы могли использовать утилиту обработки изображения как ImageMagick convert
:
size=$(wc -c < file)
convert -size "1x$size" -channel GB -fx 0 rgb:- rgb:- < file > red
# ...and so on for green and blue
Можно также сделать использование разделения каналов MATLAB. Чтение это: http://blogs.mathworks.com/steve/2011/03/08/tips-for-reading-a-camera-raw-file-into-matlab/, который это показывает, как считать Необработанные данные. Разделение каналов в MATLAB легко, как выборка некоторых элементов в матрице.
echo -n '\x40\x50\x60' | convert -size 1x1 -depth 8 rgb:- -channel R -separate -depth 8 gray:- | od -An -tx1
дает мне0xd
вместо0x40
. – Stéphane Chazelas 22.02.2013, 14:06printf
вместоecho
, это работает на меня. – mr.spuratic 22.02.2013, 14:09echo -n '\x40\x50\x60'
действительно производит три байта 0x40, 0x50 и 0x60 в моей оболочке (zsh
), но тем не менее, преобразуйте выводы один 0xd байт. Я только что протестировал с последней версией, выпущенной три дня назад. Это производит 0x40 для Вас? Отметьте это при преобразовании вrgb:-
вместоgray:-
, Я действительно вижу0x40 0x40 0x40
как ожидалось. – Stéphane Chazelas 22.02.2013, 14:32-set colorspace RGB
(или-set colorspace Gray
для этого вопросы) и изменение-channel R -separate
кому:-fx r
. – Stéphane Chazelas 22.02.2013, 14:39