2013-03-27 2 views
1

Мне было интересно, есть ли способ обнаружить завершение функции кошки, слияние файла, чтобы я мог заархивировать файлы? , например, если у меня есть простой случай, как это, папка с несколькими файлами, как это:Есть ли все-таки, чтобы обнаружить команду unix для команды «cat» слияние файлов?

/var/www/testing/file1.iso0 
/var/www/testing/file1.iso1 
/var/www/testing/file1.iso2 
/var/www/testing/file2.xls0 
/var/www/testing/file2.xls1 

поясню, используя свой веб-приложение, пользователь будет загружать file1.iso и file2.xls, и с помощью HTML5 я нарежьте каждый файл и загрузить его частично, что приведет к указанной структуре. После того, как все части каждого файла закончат загрузку, я буду использовать вызов ajax для объединения файла с помощью команды cat unix.

$command = '(files=(' . $list_file_copy . '); cat ' . '"${files[@]}" > ' . '"' . $file_name . '"' . '; rm ' . '"${files[@]}")'; 

что-то вроде этого.

exec($cmd . " > /dev/null &"); 

Мой вопрос, как я могу знать file1.iso и file2.xls закончить слияние, так что я могу отправить другую команду, чтобы пронестись файл? как в file1.iso и file2.xls, например, filexxx.zip.

Пожалуйста, обратите внимание, что файл может быть несколько и каждый отдельный файл может быть огромным (я буду говорить 4GB самое большее, что является причиной, почему это будет кусочек 100MB в небольшой части)

+0

'cat foo >> bar && baz' -' && 'ждет, пока предыдущая команда закончит, прежде чем запускать следующую. Я не уверен, есть ли более сложный способ? – Emissary

+0

@ Emissary, но в то же время я не хочу, чтобы пользователь, загрузивший файл, ожидал, что файл завершит слияние и zip. Он должен работать в фоновом режиме, поэтому после того, как часть файла выполнит загрузку и придет на сервер, пользователь может выйти из системы или сделать что-либо еще. вместо ожидания слияния и zip – Harts

+0

Возможно, вы используете какое-то соглашение об именах в объединенном файле, а затем команду cron периодически проверяете файлы, соответствующие указанному имени/шаблону, и запишите их. Достаточно уверен, что объединенная заявка не будет записана в файловую систему до тех пор, пока команда cat не завершится. – Emissary

ответ

0

вы могли бы попробовать поставьте чек на код выхода ....... , когда команда завершается, он возвращает индикатор успеха/faliure в ОС или вызывающий прог ....

в тестировании оболочки на значение $? (даст вам код выхода последней выполненной команды), если это успех, он вернет 0 в качестве кода выхода - сделайте zip, иначе выбросьте предупреждение или ошибку, как вам нравится.

Я делаю это во многих своих сценариях. надеюсь, что это поможет

+0

в этом случае команда всегда будет давать 0, потому что команда выполняется правильно, но это не означает, что процесс слияния завершен. – Harts

Смежные вопросы