|
| At finde filer på linux Fra : Jonas Jalling |
Dato : 03-06-03 09:22 |
|
Hej,
Jeg er gået helt i stå. Jeg har brug for at scanne et dir (med subdirs), for
filer med en bestemt endelse og smide dem ned i et array, med fuld sti. Jeg
går
ud fra at det er scandir jeg skal bruge, men jeg synes ikke at jeg kan komme
igang.
Er der ikke nogen der har et clue til hvordan det skal gøres? (bemærk at
programmet skal køre på linux)
--
Med venlig hilsen
Jonas Jalling
| |
Igor V. Rafienko (03-06-2003)
| Kommentar Fra : Igor V. Rafienko |
Dato : 03-06-03 12:14 |
|
[ Jonas Jalling ]
[ ... ]
> Er der ikke nogen der har et clue til hvordan det skal gøres? (bemærk at
> programmet skal køre på linux)
@Book{unix:stevensAPUE,
author = {Stevens, W. Richard},
title = {Advanced Programming in the {UNIX} Environment},
publisher = AW,
address = {Reading, MA, USA},
pages = {xviii + 744},
year = 1992,
ISBN = {0-201-56317-7},
LCCN = {QA76.76.O63 S754 1992}
}
ivr
--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
| |
Bertel Brander (03-06-2003)
| Kommentar Fra : Bertel Brander |
Dato : 03-06-03 16:35 |
|
Jonas Jalling wrote:
> Hej,
>
> Jeg er gået helt i stå. Jeg har brug for at scanne et dir (med subdirs), for
> filer med en bestemt endelse og smide dem ned i et array, med fuld sti. Jeg
> går
> ud fra at det er scandir jeg skal bruge, men jeg synes ikke at jeg kan komme
> igang.
>
> Er der ikke nogen der har et clue til hvordan det skal gøres? (bemærk at
> programmet skal køre på linux)
>
Jeg har ikke linux, men har lavet et lille program med cygwin, det
burde virke på linux også. Jeg er dog ikke sikker på at include filerne
hedder det samme på linux.
Du kører programmet med den extension du ønsker at liste som argument
(uden '.'), og så vil det liste alle filer med den extension i nuværende
direktorie og underdirektorier.
Jeg håber det kan bruges som en start.
#include <stdio.h>
#include <stdlib.h>
#include <sys/dirent.h>
#include <sys/unistd.h>
void check_ext(const char *name, const char *ext)
{
if(strlen(name) > strlen(ext))
{
const char *s = &name[strlen(name) - strlen(ext)];
if(!strcmp(s, ext) && s[-1] == '.')
{
printf("Dir> %s\n", name);
}
}
}
void scan(const char *dir, const char *ext)
{
DIR *d = opendir(dir);
if(d)
{
struct dirent *dirent;
while((dirent = readdir(d)) != NULL)
{
if(strcmp(dirent->d_name, ".") && strcmp(dirent->d_name, ".."))
{
char sub[256];
sprintf(sub, "%s/%s", dir, dirent->d_name);
scan(sub, ext);
check_ext(sub, ext);
}
}
closedir(d);
}
}
int main(int argc, char *args[])
{
char dir[256];
if(argc != 2)
{
fprintf(stderr, "Usage: %s ext\n", args[0]);
return EXIT_FAILURE;
}
getcwd(dir, sizeof(dir));
scan(dir, args[1]);
return EXIT_SUCCESS;
}
/b
| |
Jonas Jalling (03-06-2003)
| Kommentar Fra : Jonas Jalling |
Dato : 03-06-03 17:07 |
|
Bertel Brander wrote:
<snip>
> Jeg har ikke linux, men har lavet et lille program med cygwin, det
> burde virke på linux også. Jeg er dog ikke sikker på at include
> filerne hedder det samme på linux.
> Du kører programmet med den extension du ønsker at liste som argument
> (uden '.'), og så vil det liste alle filer med den extension i
> nuværende direktorie og underdirektorier.
> Jeg håber det kan bruges som en start.
<snip - et glimrende eksempel>
Hej Bertel,
Det var lige hvad jeg manglede. Mange tak for hjælpen.
--
Med venlig hilsen
Jonas Jalling
| |
Bertel Brander (03-06-2003)
| Kommentar Fra : Bertel Brander |
Dato : 03-06-03 22:30 |
|
Jonas Jalling wrote:
> Bertel Brander wrote:
> <snip>
>
>>Jeg har ikke linux, men har lavet et lille program med cygwin, det
>>burde virke på linux også. Jeg er dog ikke sikker på at include
>>filerne hedder det samme på linux.
>>Du kører programmet med den extension du ønsker at liste som argument
>>(uden '.'), og så vil det liste alle filer med den extension i
>>nuværende direktorie og underdirektorier.
>>Jeg håber det kan bruges som en start.
>
> <snip - et glimrende eksempel>
>
> Hej Bertel,
>
> Det var lige hvad jeg manglede. Mange tak for hjælpen.
>
Lige en note, hvis du har et direktorie med den extension som du leder
efter, vil dette blive listet også. Så du bør måske lave et check på om
et entry er en fil eller et direktorie. Du kan måske bruge access() til
det formål (på Windows ville man nok bruge stat() men jeg ved ikke om
den findes på Linux).
/b
| |
Robert Larsen (04-06-2003)
| Kommentar Fra : Robert Larsen |
Dato : 04-06-03 10:45 |
|
Bertel Brander wrote:
> Jonas Jalling wrote:
>
>> Bertel Brander wrote:
>> <snip>
>>
>>> Jeg har ikke linux, men har lavet et lille program med cygwin, det
>>> burde virke på linux også. Jeg er dog ikke sikker på at include
>>> filerne hedder det samme på linux.
>>> Du kører programmet med den extension du ønsker at liste som argument
>>> (uden '.'), og så vil det liste alle filer med den extension i
>>> nuværende direktorie og underdirektorier.
>>> Jeg håber det kan bruges som en start.
>>
>>
>> <snip - et glimrende eksempel>
>>
>> Hej Bertel,
>>
>> Det var lige hvad jeg manglede. Mange tak for hjælpen.
>>
> Lige en note, hvis du har et direktorie med den extension som du leder
> efter, vil dette blive listet også. Så du bør måske lave et check på om
> et entry er en fil eller et direktorie. Du kan måske bruge access() til
> det formål (på Windows ville man nok bruge stat() men jeg ved ikke om
> den findes på Linux).
>
> /b
>
stat() er svjv. en ansi c funktion så den burde findes på alle
platforme. I hvert fald findes den på Linux.
struct stat st;
char * path = .....;
if(stat(path, &st) != 0)
{
/* Handle error */
}
else if(S_ISDIR(st.st_mode))
{
/* Do stuff with directory */
}
else
{
/* Do stuff with file */
}
| |
Bertel Brander (04-06-2003)
| Kommentar Fra : Bertel Brander |
Dato : 04-06-03 12:35 |
|
Robert Larsen wrote:
>>
> stat() er svjv. en ansi c funktion så den burde findes på alle
> platforme. I hvert fald findes den på Linux.
>
>
stat er ikke en ANSI-C funktion.
/b
| |
Soren Davidsen (04-06-2003)
| Kommentar Fra : Soren Davidsen |
Dato : 04-06-03 18:40 |
|
Bertel Brander <bertel@post4.tele.dk> writes:
> Robert Larsen wrote:
>
> >>
> > stat() er svjv. en ansi c funktion så den burde findes på alle
> > platforme. I hvert fald findes den på Linux.
> >
> stat er ikke en ANSI-C funktion.
Men en Posix funktion, hvilket sikkert var hvad Robert mente - ikke ?
Mvh,
--
___
Soren Davidsen / o\
Deliver yesterday, code today, think tomorrow. (_____)
__ http://www.tanesha.net/ _________________________________(___)_______
| |
|
|