desatan
千年狐狸
千年狐狸
  • UID5373
  • 注册日期2005-04-22
  • 最后登录2008-10-16
  • 发帖数1033
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:4855回复:8

[原创]写了个gentoo下的distfiles同步程序

楼主#
更多 发布于:2006-06-09 19:02
根据portage下载最新的软件包,删除distfiles下过期的和没用的软件包。

/*GPL-2,by Desatan(a newbie)*/
#include <stdio.h>
#include <dirent.h>
char s[200];
char fs[1000][200];
char df[500][200];
int i,cnt=0,cntdf=0;
int main(int argc,char *argv[]){
        int flag;
        FILE *src;
        DIR *dist;
        struct dirent *drnt;

        puts("Downloading new files.");
        if(argc==1){
                system("emerge -fe world>/tmp/distsync.tmp");
                src=fopen("/tmp/distsync.tmp","r");
                }
        else if(strcmp("skip",argv[1])){
                src=fopen(argv[1],"r");
                if(src==NULL){
                        printf("file %s not exists!",argv[1]);
                        exit(1);
                        }
                }
        else src=fopen("/tmp/distsync.tmp","r");

        puts("Generaing files needed.");
        do{
                fgets(s,150,src);
                if((strstr(s,"checking")!=NULL)&&(strstr(s,"checksums")==NULL)){
                        for(i=13;s!=' ';++i)fs[cnt][i-13]=s;
                        fs[cnt++][i-13]='\0';
                        }
                }while(!feof(src));
        if(!cnt){
                printf("There is no info about distfiles!");
                exit(2);
                }

        printf("Checking files useless or datepassed.\n");
        dist=opendir("/usr/portage/distfiles");
        while(drnt=readdir(dist)){
                if(drnt->d_name[0]=='.')continue;
                for(i=0;i<cnt;++i){
                        flag=0;
                        if(!strcmp(drnt->d_name,fs)){flag=1;break;}
                        }
                if(!flag){strcpy(df[cntdf++],drnt->d_name);puts(drnt->d_name);}
                }

        printf("Sure to delete these files.[y/n]");
        scanf("%c",&s[0]);
        if(s[0]=='y'){
                for(i=0;i<cntdf;++i){
                        sprintf(s,"/usr/portage/distfiles/%s",df);
                        if(!unlink(s))printf("%s deleted.\n",df);
                        else printf("error!sure u r root.\n");
                        }
                }

        return 0;
        }
三翻领
禁止发言
禁止发言
  • UID6501
  • 注册日期2005-06-02
  • 最后登录2017-11-30
  • 发帖数2796
  • 经验-5234枚
  • 威望0点
  • 贡献值-10494点
  • 好评度-5257点
1楼#
发布于:2006-06-09 19:02
用户被禁言,该主题自动屏蔽!
desatan
千年狐狸
千年狐狸
  • UID5373
  • 注册日期2005-04-22
  • 最后登录2008-10-16
  • 发帖数1033
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2006-06-09 19:02
三翻领:收下了回到原帖

刚才那个有点小问题,用这个最新的吧
desatan
千年狐狸
千年狐狸
  • UID5373
  • 注册日期2005-04-22
  • 最后登录2008-10-16
  • 发帖数1033
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2006-06-09 19:02
搞了半天,原来用这个命令就可以了。
eclean-dist -d
hnstxx
千年狐狸
千年狐狸
  • UID1952
  • 注册日期2005-01-09
  • 最后登录2013-05-14
  • 发帖数4977
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2006-06-09 19:02
留下来了,看那天装gentoo了就有用了。
MM:你是个外表冷酷,内心却很甜蜜的男人。
无聊望见了犹豫
千年狐狸
千年狐狸
  • UID3586
  • 注册日期2005-03-04
  • 最后登录2017-02-12
  • 发帖数1679
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
5楼#
发布于:2006-06-09 19:02
楼主是牛人,鉴定完毕  
xincentre
非常火狐
非常火狐
  • UID12562
  • 注册日期2006-05-02
  • 最后登录2022-06-19
  • 发帖数705
  • 经验15枚
  • 威望0点
  • 贡献值4点
  • 好评度0点
  • 社区居民
6楼#
发布于:2006-06-09 19:02
hnstxx:留下来了,看那天装gentoo了就有用了。回到原帖

等你装好箭头这个脚本已经不能用了
无聊望见了犹豫
千年狐狸
千年狐狸
  • UID3586
  • 注册日期2005-03-04
  • 最后登录2017-02-12
  • 发帖数1679
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
7楼#
发布于:2006-06-09 19:02
xincentre
等你装好箭头这个脚本已经不能用了
回到原帖


我回好帖子,就看见你的帖子,前后差1秒钟?      
xincentre
非常火狐
非常火狐
  • UID12562
  • 注册日期2006-05-02
  • 最后登录2022-06-19
  • 发帖数705
  • 经验15枚
  • 威望0点
  • 贡献值4点
  • 好评度0点
  • 社区居民
8楼#
发布于:2006-06-09 19:02
我回好帖子,就看见你的帖子,前后差1秒钟?      

我比较擅长同步
游客

返回顶部