Re: virtual fs ?

2003-12-02 Пенетрантность Andrew Lipnitsky




Sergey пишет:

  Здравствуйте Все.

  Вопрос не по Дебиану конкретно, а по Линуксу вообще...
  Существуют ли средства, позволяющие создавать образы сд, содержащие
  только описания файлов - имя, тип, размер, путь, возможно права?
  Чтобы не хранить все это на винте, но иметь возможность поиска по
  всем имеющимся сд.
  Можно конечно сделать find /cdrom  file.txt , но это имхо как-то
  криво... В общем, хочется не изобретать велосипед, а использовать
  проверенные решения...

  Заранее спасибо всем ответившим.

  

Katalog is set of shell scripts to
create/list/search an index of your CDs. It is
very simple and fast. All indices are compressed
with gzip to save space. Because it is written in
sh, it is very portable. Katalog uses egrep to
search indices. http://www.ceti.pl/eaquer/katalog/


GTKtalog is a tool to make disk catalog: you can use it to create a
really small database with images of files and directories of your CDs.
http://www.nongnu.org/gtktalog/


И еще один каталог
Katalog is a CD organizer for the K
Desktop Environment 
 If you have many Cds and tons of downloaded files, but you aren't
able to remember where you put a file when you need it, then Katalog
may help you. 
 With this application you can scan a CD and store all the data
about each file in a tree structured catalog. You can add as many
catalogs as you like. Searching through the catalogs it's easy and
fast: each file can be associated with a category to make the search
easier and more accurate. 
 The folder to search can be on your drive or on a removable media,
such a CD, ZIP or floppy. 
 Katalog saves data in a XML file, compressed on the fly using
bzip2. 
http://salvaste.altervista.org


С уважением,
Андрей Липницкий.




Re: virtual fs ?

2003-11-28 Пенетрантность Vlad Harchev
Hi,

Я делаю так:

cd /mnt/cdrom  LC_ALL=C ls -lR  ~/lists/cdtitle/lslR  gzip 
~/lists/cdtitle/lslR

Последнее ( gzip ..) необязательно.
А потом в mc просто жму Enter на файле ~/lists/cdtitle/lslR.gz, и вижу его как 
обычный архив  (то есть инфа о дате, имени, правах и пути есть вся).

-- 
 Best regards,
  -Vlad

On Thu, Nov 27, 2003 at 05:47:37PM +0200, Sergey wrote:
 Здравствуйте Все.
 
   Вопрос не по Дебиану конкретно, а по Линуксу вообще...
   Существуют ли средства, позволяющие создавать образы сд, содержащие
   только описания файлов - имя, тип, размер, путь, возможно права?
   Чтобы не хранить все это на винте, но иметь возможность поиска по
   всем имеющимся сд.
   Можно конечно сделать find /cdrom  file.txt , но это имхо как-то
   криво... В общем, хочется не изобретать велосипед, а использовать
   проверенные решения...
 
   Заранее спасибо всем ответившим.



Re: virtual fs ?

2003-11-28 Пенетрантность Slava Astashonok

Sergey wrote:

Здравствуйте Все.

  Вопрос не по Дебиану конкретно, а по Линуксу вообще...
  Существуют ли средства, позволяющие создавать образы сд, содержащие
  только описания файлов - имя, тип, размер, путь, возможно права?
  Чтобы не хранить все это на винте, но иметь возможность поиска по
  всем имеющимся сд.
  Можно конечно сделать find /cdrom  file.txt , но это имхо как-то
  криво... В общем, хочется не изобретать велосипед, а использовать
  проверенные решения...


Если вы не брезгуете пользоваться mc, то попробуйте его extfs, 
позволяющую смотреть ls-lR файлы - mc может заходить в файлы вида 
filename.ls-lR, созданные через ls -lRa.


--
All constants are variables.



virtual fs ?

2003-11-27 Пенетрантность Sergey
Здравствуйте Все.

  Вопрос не по Дебиану конкретно, а по Линуксу вообще...
  Существуют ли средства, позволяющие создавать образы сд, содержащие
  только описания файлов - имя, тип, размер, путь, возможно права?
  Чтобы не хранить все это на винте, но иметь возможность поиска по
  всем имеющимся сд.
  Можно конечно сделать find /cdrom  file.txt , но это имхо как-то
  криво... В общем, хочется не изобретать велосипед, а использовать
  проверенные решения...

  Заранее спасибо всем ответившим.

-- 
С уважением,
 Sergey  mailto:[EMAIL PROTECTED]



Re: virtual fs ?

2003-11-27 Пенетрантность Alex Riesen
Sergey, Thu, Nov 27, 2003 16:47:37 +0100:
 Здравствуйте Все.
 
   Вопрос не по Дебиану конкретно, а по Линуксу вообще...
   Существуют ли средства, позволяющие создавать образы сд, содержащие
   только описания файлов - имя, тип, размер, путь, возможно права?
   Чтобы не хранить все это на винте, но иметь возможность поиска по
   всем имеющимся сд.
   Можно конечно сделать find /cdrom  file.txt , но это имхо как-то

find /cdrom -print0 | xargs -0 ls -dfl  cdrom.lst
советую давать имена этим файлам поосмысленнее, чем cdrom.lst.
Иначе потом бесполезно что-либо искать.

   криво... В общем, хочется не изобретать велосипед, а использовать
   проверенные решения...

а есть они?

Если делать нечего, можно скопировать атрибуты и размер (если файловая
система дырявые(sparse) файлы поддерживает: ext2/3, reiser, xfs, jfs).
Если чего-нить вроде фата - убери ftruncate.
Расширеные атрибуты не копируются, сам делай.
Например, вот так:

$ find /cdrom -exec cpattr '{}' './{}' \;

/*
 * cpattr
 * cc -o cpattr cpattr.c
 */
#define _GNU_SOURCE
#include unistd.h
#include sys/types.h
#include sys/stat.h
#include stdlib.h
#include stdio.h
#include limits.h
#include fcntl.h
#include utime.h
#include errno.h
#include string.h

int mkp(const char *path, unsigned long mode)
{
   const char* p = strchr(path, '/');
   char* part = (char*)malloc(strlen(path) + 1);
   while ( p )
   {
   if ( p - path )
   {
   struct stat st;
   strncpy(part, path, p - path)[p - path] = 0;
   if ( stat(part, st)  0 )
   {
   if ( mkdir(part, mode)  0 )
   {
   free(part);
   return -1;
   }
   }
   else if ( !S_ISDIR(st.st_mode) )
   {
   free(part);
   errno = EINVAL;
   return -1;
   }
   }
   while ( *p  '/' == *p )
   ++p;
   const char* next = strchr(p, '/');
   p = next ? next: (*p ? p + strlen(p): 0);
   }
   free(part);
   return 0;
}

int cpattr(const char* in, const char* out)
{
struct stat st;
struct utimbuf ut;
if ( lstat(in, st)  0 )
{
perror(in);
return 1;
}
if ( S_ISDIR(st.st_mode) )
{
if ( mkp(out, st.st_mode  0777)  0 )
{
perror(out);
return 2;
}
chown(out, st.st_uid, st.st_gid);
/* delay utimes. */
return 0;
}
unlink(out);
if ( S_ISLNK(st.st_mode) )
{
static char buf[PATH_MAX+1];
int n = readlink(in, buf, sizeof(buf) - 1);
if ( n  0 )
{
perror(out);
return 2;
}
buf[n] = '\0';
if ( symlink(buf, out)  0 )
{
perror(out);
return 2;
}
lchown(out, st.st_uid, st.st_gid);
chmod(out, st.st_mode  0777);
}
if ( S_ISREG(st.st_mode) )
{
int fo = open(out, O_WRONLY|O_CREAT|O_TRUNC, 0200);
if ( fo  0 )
{
perror(out);
return 2;
}
ftruncate(fo, st.st_size);
fchown(fo, st.st_uid, st.st_gid);
fchmod(fo, st.st_mode  0777);
close(fo);
}
#define DEVMASK (S_IFIFO|S_IFSOCK|S_IFCHR|S_IFBLK)
else if ( st.st_mode  DEVMASK )
{
if ( mknod(out, st.st_mode  (DEVMASK|0777), st.st_dev)  0 )
{
perror(out);
return 2;
}
chown(out, st.st_uid, st.st_gid);
}
ut.actime = st.st_atime;
ut.modtime = st.st_mtime;
utime(out, ut);
return 0;
}

int main(int argc, char* argv[])
{
umask(0);
return cpattr(argv[1], argv[2]);
}