LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 946|回复: 6

emerge升级时候产生很多旧文件旧包,有无完美的命令一次能清除呢?

[复制链接]
发表于 2005-5-10 23:59:32 | 显示全部楼层 |阅读模式
升级了kde3.4,发现3.3.2还上百M文件存在,/usr/portage/distfiles/下也有不用的旧包,请问怎样才能比较好的清理垃圾?
发表于 2005-5-11 00:52:09 | 显示全部楼层
emerge -c
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-11 07:03:57 | 显示全部楼层
这个命令起不到任何作用
回复 支持 反对

使用道具 举报

发表于 2005-5-11 08:15:39 | 显示全部楼层
unmerge package completely

  1. emerge --unmerge xxxx (unmerge xxx and remove xxx from world file)
  2. emerge -pv depclean  (check if exist any package that should not be cleaned)
  3. emerge -v depclean (deep clean procedure)
  4. revdep-rebuild -v (dependence rebuild, package 'gentoolkit' expected maybe)
  5. glsa-check -f all (GLSA check)
复制代码

clear distfiles unused:
i've got a script for forums.gentoo.org  that may do this work for me

  1. #!/usr/bin/perl -w
  2. use strict;

  3. my $lastname = 0;
  4. my $lastversion;
  5. my $lastext;
  6. my @stalefiles;
  7. my @files;

  8. # Insert your exclusions here with trailing '-'
  9. my %maskedfiles = (
  10.    'X420src-' => 1,
  11.    'gcc-' => 1,
  12.    'freetype-' => 1
  13. );

  14. # Root check
  15. if ($< != 0) {
  16.    print "You must be root to run this script.\n";
  17.    exit 0;
  18. }

  19. # Determine sources present on the system
  20. print "Determining available tarballs in /usr/portage/distfiles ...\n";
  21. opendir(DIR, "/usr/portage/distfiles");
  22. @files = sort(readdir(DIR));
  23. closedir(DIR);

  24. # Grab names/versions, checking each time whether current distfile
  25. # has been superceded. Push anonymous array ref containing required
  26. # info into @stalefiles array.
  27. print "Determining stale versions ...\n";
  28. foreach (@files) {
  29.    my $name;
  30.    my $version;
  31.    # Only operate on tarballs   
  32.    if (/(.+?\-)([0-9r\.\-]+)(\.tar\.gz|\.tgz|\.tar.bz2)/s) {
  33.       $name = $1;
  34.       $version = $2;
  35.       next if ($maskedfiles{$name}); # Ignore "masked" files
  36.       if ($lastname && $name eq $lastname) {
  37.          if ($version gt $lastversion) {
  38.             push (@stalefiles, [$name, $version, $lastversion, $lastext]);
  39.          }
  40.       }
  41.       $lastname = $name;
  42.       $lastversion = $version;
  43.       $lastext = $3;
  44.    }
  45. }

  46. if (@stalefiles == 0) {
  47.    print "\nNo stale distfiles have been detected on your system!\n";
  48.    exit 0;
  49. }

  50. if ($ARGV[0] && $ARGV[0] eq '--nopretend') {
  51.    # User requested deletion so here goes ...
  52.    print "*Nopretend* mode, deleting stale files:\n\n";
  53.    foreach (@stalefiles) {
  54.       my ($name, $version, $lastversion, $ext) = @{$_};
  55.       unlink('/usr/portage/distfiles/' . $name . $lastversion . $ext);
  56.       print "Deleted: $name$lastversion in favour of $name$version\n";
  57.    }
  58. }
  59. else
  60. {
  61.    # Safe mode (default)!
  62.    print "\7*Pretend* mode, will only pretend to delete files.\nTo actually delete the files, reinvoke with the --nopretend parameter.\n\n";
  63.    foreach (@stalefiles) {
  64.       my ($name, $version, $lastversion, $ext) = @{$_};
  65.       print "Would delete: $name$lastversion in favour of $name$version\n";
  66.    }
  67. }
  68. 1;

复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-11 09:39:35 | 显示全部楼层
相比之下,archlinux的pacman -Sc,pacman -Scc命令就方便多了
回复 支持 反对

使用道具 举报

发表于 2005-5-11 13:09:18 | 显示全部楼层
手动清除得了……
回复 支持 反对

使用道具 举报

发表于 2005-5-11 14:18:58 | 显示全部楼层
http://www.leak.com.ar/~juan/code/distcleaner/
一个解决方案。
官方还没类似freeBSD portsclean -DD的命令是个遗憾--当然也可能是我不知道。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表