Привет, стэкпопперы!
У меня есть две вещи, которые нужно решить и отобразить результаты онлайн в cgi-файле.
A) получить все следующие имена на заданном пути
B) определить возраст index.html внутри каждой папки
результат должен выглядеть следующим образом:
[номер] [имя_фолдера] [fileage]
Эта cgi-страница работает на сервере Solaris с установленным Perl 5.8.4
Мое решение - это комбинация bash и perl. Для решения проблемы A) (имена папок) я написал скрипт bash:
#!/bin/bash
#
find /test/ -type d | sed -e 's/^.*\///'
Это дает мне хороший список всех foldernames в / test /
Теперь Perl-код для отображения этого вывода в браузере:
#Establish a pipeline between the bash and my script.
my $bash_command = '/test./foldernames.bash';
open(my $pipe, '-|', $bash_command) or die "Can't open pipe: $!";
# initialize variables
my $foldername = "";
my $i = 0;
# Process the output from bash command line by line.
while (my $line = <$pipe>)
{
$foldername = $line;
$i = $i+1;
print" <tr><td>$i</td><td>$foldername</td></tr>";
}#end while
Это работает! Я получу хороший стол с [Number] и [Foldername]! Теперь самое сложное! Кроме того, я хочу, чтобы дата index.html находилась в каждой папке. Поэтому у меня есть другой скрипт bash:
ls -ltr /test/folder1/*.html | tail -1 | awk '{printf"%3s %1s %s\n",$6, $7, $8}`
Это дает мне идеальный вывод: 22 февраля 10: 56 Теперь мне нужна эта информация в моей таблице. Я добавил эту строку в свой Perl-скрипт в цикле while:
$timestamp = `ls -ltr /test/folder1/*.html | tail -1 | awk '{printf"%3s %1s %s\\n",\$6, \$7, \$8}`;
Это прекрасно работает, когда я добавляю имя в виде строки. Как только я обменяю folder1 на $ foldername , я получу бессмысленную информацию "ls".
Почему это так?
Редактировать: Теперь я использовал:
use File::stat;
use Time::localtime;
my $timestamp = ctime(stat("/test/folder1")->mtime);
Это намного более безопасно по сравнению с анализом вывода ls. Но все же у меня есть проблемы с $ foldername. Я использовал функцию length , чтобы определить длину $ Foldername .
$ foldername имеет длину 7, но вывод строки имеет только 6 символов: помидор
Итак, я попробовал Chop / chomp $ foldername с всегда одинаковым результатом: 7 символов!