![]() |
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| Распакуйте частности GZIP файлов среди нормальных файлов данных | thepurple | Shell программирование и сценарии | 4 | 11-30-2007 11:17 AM |
| GZIP все файлы в директории | er_ashu | UNIX для чайников Вопросы И Ответы | 2 | 11-06-2007 09:05 AM |
| Необходимость GZIP больших файлов | LordJezo | UNIX для чайников Вопросы И Ответы | 2 | 05-02-2005 04:18 PM |
| GZIP, несколько файлов | smbodnar | UNIX для чайников Вопросы И Ответы | 2 | 11-11-2002 04:29 PM |
| Два файлы, созданные на каждого? | Атама | UNIX для чайников Вопросы И Ответы | 1 | 04-12-2002 04:44 PM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
GZip файлов, как они создали
Здравствуйте. У меня есть сценарии запросов, что я тупик, в который я надеюсь, что вы можете помочь с.
В принципе, у меня есть KSH скрипт, который называет процесс создания Н Число двоичных файлов. Эти файлы имеют максимальный размер 1Gb. Этот процесс может написать Н Количество файлов сразу (параллельная работа) на основе параметров paralellisation учтены сценария в самом начале. Как правило, мы будем ждать этот процесс завершить, а затем GZIP все файлы по отдельности (GZIP *. DMP, например). Тем не менее, на некоторых системах у нас нет достаточно места на диске подождать, пока все файлы 1Gb были подготовлены. Я уже написал несколько код GZIP файлов параллельно (см. ниже), однако, я сейчас необходимо GZIP их параллельно, а первый процесс идет. Мне нужно быть осторожными, не пытаться GZIP любые файлы, в настоящее время пишется (до Н Параллельно с командой), так что определенный цикл будет необходимо. И я хочу сохранить возможность параллельно GZIP, если это возможно. Код:
...
gzip_func() {
started=0
threads=4
for filename in `ls -1 ${EXP_DIR}/*.dmp`
do
if [[ ${started} -lt ${threads} ]]; then
let started=started+1
echo "gzip ${filename}"
( $GZIPCMD ${filename} ) &
list_of_pids="${list_of_pids} $!"
else
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
started=0
fi
done
}
...
my_binary_file_creation_process
...
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do
gzip_func
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
done
Большое спасибо и наилучшими пожеланиями, Стивен. |
|
||||
|
Благодаря cfajohnson. Я постараюсь включить ваши рекомендации.
Однако, по моему реальные проблемы, Oracle утилиты экспорта (процесс, который создает бинарные файлы) будет создан файл, а затем заполнить ее данными вверх, пока он не достигнет 1Gb по размеру, то это создаст новый файл. Если мы используем parallelisation, она будет создавать Н Количество файлов (по одному для каждого параллельного процесса), и заполнить их. Окончательный бинарных файлов, создаваемых и, вероятно, мог бы быть меньше 1Gb. Моя мысль заключалась в том, чтобы вызвать GZIP функции до утилиты экспорта, а затем его ждут файлы GZIP, т.е. только если GZIP файлов Есть больше, чем число параллельных Н. Так что, если параллельно был установлен на 4, только 5 GZIP файл. Мышление его, мне трудно определить, какой файл в GZIP программа должна GZIP, как мы можем не только ZIP-файлов 1Gb по размеру, как она все равно может быть отделка письменном виде файла и т.д. Можно ли использовать нечто вроде термического определить, если экспорт инструмент закончил с файлом? Возможно, некоторые формы цикл GZIP, что ждет за термического возвращаться не PID для экспорта файла и затем застежек-молний это? Я посмотрел на экспорт и видим, что, когда утилита закончили написание файла он не блокирует так это может быть осуществимо. Я хотела бы получить ваши идеи. С уважением. |
|
||||
|
Цитата:
но я понимаю, что вы имеете в виду.Я сделал некоторые игры и обнаружили, что экспорт будет создан файл 4k первоначально, а затем прекратить ее использование, а это создает список объектов, на экспорт. После этого он возвращает блокировку на файл, и заполняет файл до 1gb размера. Я изменить мою код использовать дю и термического тест, чтобы убедиться, что файл был больше, чем 4k, а не используются какие-либо пользователем. Я считаю, что если я использовать параллелизм на экспорт будет создана Н количество файлов, а затем заполнить их, он может начать с файлами 1,2,3 и 4, а 1,3 и 4 внезапно достичь 1Gb поэтому создает 5,6,7 продолжать параллельные задачи. файл 2 пока еще не полностью (по какой причине). Файлы 1,3 и 4 в настоящее время неиспользуемые но gzip_func-видимому, не хотят GZIP файлов до тех пор, пока файл 2 также неиспользованные - которая зачастую может быть не до конца экспорт. Не могли бы Вы, пожалуйста, обратите внимание на приведенный ниже код и посмотреть, если вы можете пятно очевидную ошибку? Я хочу, чтобы код действительно начала gzipping, когда 2-тесты прошли, независимо от того, она может лишь GZIP 1 файл или до Н нитей. Любые идеи? Код:
gzip_func() {
started=0
threads=4
for filename in ${EXP_DIR}/*.dmp
do
# Check if file is bigger than 8K and is not being used
if [ `du -sk "${filename}"|awk '{print $1}'` -gt "8" ] && [ `fuser "${filename}" 2>/dev/null | wc -m` -eq "0" ]; then
# Loop through files until 4 are started (to match threads)
if [ ${started} -lt ${threads} ]; then
started=$(( $started + 1 ))
echo "gzip ${filename}"
$GZIPCMD "${filename}" &
list_of_pids="${list_of_pids} $!"
else
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
started=0
fi
else
echo "${filename} is still being written to, trying next file..."
fi
done
}
# Export creation - note done in background to allow gzip loop to run
expdp '"/ as sysdba"' directory=DPUMP_DIR_ADHOC dumpfile=ram6_full%U.dmp logfile=ram6_full.log filesize=1024m full=y parallel=4 &
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do
gzip_func
print "out of loop wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
sleep 5
done
|
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|