2013-12-08 2 views
2

Я пытаюсь извлечь каталог с файлами tar, но он работает некорректно. Команда работает в командной строке, но не с «системой» в perl. Мне действительно нужно это для работы в perl.Perl, используя систему для извлечения tar

$tar_dir = "/root/updates/*.tar.bz2"; 
system ("for i in $tar_dir ; do tar xvfj $i; done"); 

Работы по командной строке, как это: for i in *.bz2 ; do tar xvfj $i; done

я упускаю что-то?

Благодаря

ответ

4

Или вы могли бы переместить петлю в код Perl:

use warnings; 
use strict; 

for (glob '/root/updates/*.tar.bz2') { 
    system "tar xvfj $_"; 
} 
+1

Это точно лучший вариант. – Mat

+1

Еще лучше, используйте 'system" tar "," xvjf ", $ _', чтобы не пропускать имена файлов через оболочку. (Подробнее см. В [perldoc -f system] (http://perldoc.perl.org/functions/system.html). –

+1

Спасибо @toolic, это работает безупречно! –

3

Да, вы забыли, чтобы избежать $i в строке в Perl.

Try:

system ("for i in $tar_dir ; do tar xvfj \$i; done"); 

Если вы не избежать, то она получит расширена так же, как $tar_dir. Удостоверьтесь, что у вас есть use strict; и use warnings; в верхней части вашего скрипта perl, это поможет немного с подобными вещами (если $i не был определен в perl-скрипте, в этом случае у вас есть сообщение от perl tell . вы об этой проблеме)

+0

большое спасибо. Оба ответа работали, и поскольку вы сказали, что инструмент показал лучший вариант, я поеду со своим :). Спасибо за напоминание о том, что вы используете строгую и предупреждающую информацию. –

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