From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1O5zrt-000457-T5 for garchives@archives.gentoo.org; Sun, 25 Apr 2010 11:19:22 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id B817FE0884; Sun, 25 Apr 2010 11:19:18 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id C0AADE0896 for ; Sun, 25 Apr 2010 11:19:00 +0000 (UTC) Received: from [10.0.3.10] (unknown [188.80.116.137]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTP id 6C9471B4026 for ; Sun, 25 Apr 2010 11:18:57 +0000 (UTC) Message-ID: <4BD42501.9070505@gentoo.org> Date: Sun, 25 Apr 2010 13:18:25 +0200 From: Angelo Arrifano Organization: Gentoo Linux Foundation User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100419 Lightning/1.0b2pre Thunderbird/3.0.4 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org MIME-Version: 1.0 To: List/Gentoo-dev Subject: [gentoo-dev] [RFC][NEW] Utility to find orphaned files X-Enigmail-Version: 1.0.1 Content-Type: multipart/mixed; boundary="------------020507090405030300030609" X-Archives-Salt: a5c4e2c6-210c-4893-8570-5777f30c14c8 X-Archives-Hash: 2d1b3171fabac2e6713b5df6e1aea931 This is a multi-part message in MIME format. --------------020507090405030300030609 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hello developers developers and developers, Ever wondered how much crap is left in your X-years old Gentoo box? I just developed a python utility to efficiently find orphaned files in the system. By orphaned files I mean the files that are present on system directories and don't belong to any installed package. The package builds a virtual filesystem (cache) on the RAM using python hash tables. Then it uses the cache to find the ownership of files inside user-specified dirs. Building the cache takes less than 10 seconds here in a system with 1366 installed packages. This is not intended to be a finished program yet, I'm looking forward for your constructive commentaries. [Attached] Regards, -- Angelo Arrifano AKA MiKNiX Gentoo Embedded/OMAP850 Developer Linwizard Developer http://www.gentoo.org/~miknix http://miknix.homelinux.com --------------020507090405030300030609 Content-Type: application/x-bzip; name="find-orphaned-0.01.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="find-orphaned-0.01.tar.bz2" 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 gA== --------------020507090405030300030609--