LinuxForum.Fans
Тема

Создание списка файлов на дисках

Автор: BuxarNET 37 сообщений 9595 просмотров
#170389

Да тут делов на 5 мин на самом деле.
Начните самого простого на perl например.

$ sudo ./test.pl

text

/home/user/test.pl

Сам скрипт

text

#!/usr/bin/perl
use warnings;

@file =`find /home/user/ -name "*.pl"`;

for $line (@file) { print $line; }

В цикле
for $line (@file)
{
print $line;
}

Можно вывести в html в опредилёный файл например /var/www/catalog.html
Тут уже зависит от вас.

#170396
Kettler написал:
$ sudo ./test.pl

а зачем sudo? мы же все равно будем искать в пределах домашнего каталога пользователя. =)
кстати, а вот сюда вроде бы можно добавить в /home/user/ место user 'whoami', если конечно же имя пользователя будет совпадать с именем домашнего каталога, это будет некий универсальный способ =)
Надо завтра будет попробовать =)

#170398

smile да я это так))))) по привычке. На perl легко написать столь лёгкую задачу.
Я бы помог ну у меня отпуск кончился так что опс.

#170402

вот это добавить чтоб вытащить чисто название файла.

text

$pos = rindex ($line, "/");
$name = substr ($line, $pos+1);
print $name;
#170419

Например книга kettler_linux.pl

автор kettler книга linux smile

Данный скрипт всё делает за наc.

text

#!/usr/bin/perl
@file =`find /home/user/ -name "*.pl"`;

for $line (@file) { $pos = rindex ($line, "/"); $name = substr ($line, $pos+1);

($author, $nam) = split ("_", $name); $poss = rindex ($nam, "."); $na = substr ($nam, 0, $poss);

print "автор", " ", $author, " ", "книга", " ", $na, "\n"; }

На выхлопе.

автор kettler книга linux

Остальное думаю для вас мелочь. Сюда чуток html и готов.

#170474

Продолжение надо?

#170519

Спасибо за объяснения!
Но я сейчас чувствую себя как папуас во время лекции Нобелевского лауреата на тему "Квантовая механика - это очень просто!". :D

#170546

Ну так давай те больше информации.
Ток чуть марока с каталогами.
Хотя думаю если структура типо такой.

/var/www/catalog.html
/var/www/nauka/
/var/www/tehnika/
/var/www/porno/

А в них уже pdf можно что нибудь придумать.
Ещё важно что шаблон был типо.
alya_vatcen.pdf

#170619

Ещё раз спасибо за Вашу попытку помочь мне, но я уже нашёл простое решение smile . В очередной раз убедился, что внимательное чтение манов оч.полезно. Меня выручила команда tree c соответствующими опциями (спасибо уважаемому i2ks за подсказку).
[console]tree -a -H ~/e-books/ -o ~/listfiles.html --dirsfirst ~/e-books/[/console]
В файл listfiles.html в виде дерева выводится список подкаталогов и файлов, находящихся в каталоге ~/e-books. Файл естественно в html-формате, названия подкаталогов и находящихся в них файлов эл.книг кликабельны (гиперссылки). При открывании listfiles.html в браузере и клике по нужному файлу эл.книги, она открывается в соответствующем вьюере (у меня это настроено). Конечно же, в браузере можно вести и поиск текста в названиях эл.книг. Т.е. моя проблема полностью решена.
Спасибо также Steve Baker, Thomas Moore and Francesc Rocher, создателям и разработчикам замечательной программы tree

#170970
dsmith написал:
У меня складывается впечатление, что тут собрались люди, которые просто не слышали про локальные поисковые системы. Суть в том, что сначала создается Индекс, поиск по которому на порядок быстрее, чем по "голой" ФС, а затем производится поиск по индексу. Так же многие поисковики отслеживаю изменения файлов realtime и [вероятно] модифицирую индекс. В подробности реализации не влезал, но таких систем много, есть даже от Гугла. Утилита locate создает подобный индекс периодически, по cron`у. Я не знаю, чего еще можно обсуждать в этой теме.

Дело в том, может меня не правильно поняли вы, искать мне нужно не на локальном диске, а на болванках, которых может быть и сотня, поэтому из выше перечисленных способов, вариант с tree самый подходящий, протестировал на локальной папке запросом tree /home/buxar/Картинки/ -o /home/buxar/Картинки/test
Разочаровало в выводе:
/home/buxar/\320\232\320\260\321\200\321\202\320\270\320\275\320\272\320\270/

Где цифры это слово "Картинки"

Понимать по русски его заставить можно или подобную утилю какую припохать?

#170977

Вопрос отпал, если все в html делать
tree -a -H /home/buxar/Картинки/ -o /home/buxar/Картинки/test.html

Выводит
/home/buxar/Картинки/

#171012

Угу мне интересно как апач будет понимать /home/buxar/Картинки/
Вот накидал если вдруг заинтересует тогда можно дальше пилить.
А щас чисто как экземпляр тебе.

text

#!/usr/bin/perl
$path_files = "/home/user/";
$site = "http://linuxforum.ru/";
@file =`find $path_files -name "*.pl"`;
open (FH1, "> /home/user/index.html");

for $line (@file) { $pos = rindex ($line, "/"); $name = substr ($line, $pos+1); ($author, $nam) = split ("_", $name); $poss = rindex ($nam, "."); $na = substr ($nam, 0, $poss); $author = "автор" . " " . $author . " " . "книга" . " " . $na; $line =~ s/$path_files//; $path = $site . $line; print FH1 "<a href=$path>$author</a>", "\n"; } close (FH1);

#171039
BuxarNET написал:
/home/buxar/\320\232\320\260\321\200\321\202\320\270\320\275\320\272\320\270/

от локали все завист, помнится на bsd такой номер был, под linux все четко.

#171159

Может кто проверит?

text

#!/usr/bin/perl
my $path_files = "/var/log/";
my $site = "linuxforum.ru/";
my @file =`find $path_files -name "*.log"`;
@file = sort @file;

sub fold { $l = @_; $data = @_ [0]; open (FHH1, "> $data"); $d = $data; $d =~ s/$path_files//; ($ra, $raz) = split ("/", $d); print FH1 "<a href=http://$site$d>раздeл $ra</a>", "<br>"; foreach ($1) { $data1 = @_ [1]; $data2 = @_ [2]; print FHH1 "<a href=http://$data1>$data2</a>", "<br>"; } close (FHH1); }

$pa = $path_files . "index.html"; open (FH1, "> $pa"); for $line (@file) { $pos = rindex ($line, "/"); $name = substr ($line, $pos+1); ($author, $nam) = split ("_", $name); $poss = rindex ($nam, "."); $na = substr ($nam, 0, $poss); $author = "автор" . " " . $author . " " . "книга" . " " . $na; $line =~ s/$path_files//; $path = $site . $line; if (split ("/", $line) > 1) { ($n1, $n2, $n3) = split ("/", $line); $pat = $path_files . $n1 . "/" . "index.html"; fold ($pat, $path, $author); } print FH1 "<a href=http://$path>$author</a>", "<br>"; } close (FH1);

Очень много переменных ну это подправлю позже.
На выхлопе пример

ну я тестил на логах))
раздeл apt
автор term.log книга
автор backup книга video

#172319

При проверке выяснилось, что при наличии пробелов в имени файла получается такая картина (пример):

имя файла: Ackermann L. Modern Arylation Methods.pdf
отображение в браузере: автор Ackermann L. Modern Arylation Methods.pdf книга
адрес ссылки: file:///home/awl/Books/Ackermann

Если имя файла без пробелов, то выходит вот так:

имя файла: Jouyban_A._Handbook_of_Solubility_Data_for_Pharmaceuticals.pdf
отображение в браузере: автор Jouyban книга A
адрес ссылки: file:///home/awl/Books/Jouyban_A._Handbook_of_Solubility_Data_for_Pharmaceuticals.pdf

или так:

имя файла: Nielsen-S.S.-(ed.)-Food-Analysis-Laboratory-Manual.pdf
отображение в браузере: автор Nielsen-S.S.-(ed.)-Food-Analysis-Laboratory-Manual.pdf книга
адрес ссылки: file:///home/awl/Books/Nielsen-S.S.-(ed.)-Food-Analysis-Laboratory-Manual.pdf

#172388

smile а вы что хотели?
в моём скрипте пути становятся правильные.

#265974
BuxarNET написал:
Вопрос отпал, если все в html делать
tree -a -H /home/buxar/Картинки/ -o /home/buxar/Картинки/test.html

Выводит
/home/buxar/Картинки/

В общем опция /home/buxar/Картинки/ не работает, tree начинает перебирать файлы из директории в которой запускается команда, несколько не удобно, но все же приемлемо

Войдите или зарегистрируйтесь, чтобы ответить.