только для tar *.log файлов и удаления исходных данных по завершении

#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);
}