#shell #tar
#оболочка #tar
Вопрос:
Я использую следующий скрипт для создания архива каталога с php
exec("tar -zcvf archive_name.tar.gz *");
и это работает, как ожидалось, но я хотел бы расширить этот код, чтобы он добавлял в архив только файлы, которые имеют определенное расширение (в данном случае *.log), а затем удалял оригиналы после создания архива. Любые советы или примеры были бы замечательными.
ТИА, Кевин
Ответ №1:
Вы можете изменить свою команду на:
exec("tar -zcvf archive_name.tar.gz *.log amp;amp; rm -f *.log")
Внесены изменения:
-
Вместо передачи всего файла (
*
) в качестве аргументаtar
мы теперь передаем*.log
-
Добавлено
amp;amp; rm -f *.log
. Командаrm -f *.log
принудительно удаляет все.log
файлы из текущего рабочего каталога. Мы использовалиamp;amp;
в качестве связующего звена между двумя командами, потому что мы хотим, чтобы файлы удалялись только после создания архива.
Комментарии:
1. спасибо, ваши ответы и ответы Тома почти точно такие же, за вычетом переключателя -f, который, я думаю, необходим, так что спасибо еще раз.
2. @Kevin: Добро пожаловать. Посмотрите на ответ @Elzo Valugi, который выглядит лучше, поскольку он переносим. Также не забудьте принять ответ, который помог вам больше всего.
Ответ №2:
На самом деле это не имеет отношения к php, поскольку вы все равно просто переходите к команде командной строки. Попробуйте
exec("tar -zcvf archive_name.tar.gz *.log amp;amp; rm *.log");
Ответ №3:
Это должно быть по ошибке сервера. Tar — это программа для Linux. Если вы хотите сделать то же самое на чистом PHP, вы можете использовать glob и Zend_Filter tar-адаптер:
$files = glob("*.log");
foreach($files as $file) {
$filter = new Zend_Filter_Compress(array(
'adapter' => 'tar',
'options' => array(
'archive' => 'filename.bz2'
),
));
$compressed = $filter->filter($file);
}