On Wed, 2008-12-31 at 13:44 -0600, Josh Paetzel wrote:
> then echo $i >> /tmp/unknown.txt
Yep! Thanks.
> While this approach will probably work, it's bound to be fairly slow.
Yep. I guess I was imagining it would be used for initial "discovery",
ie: find paths to backup then hard-code what you find, but I guess it
probably wouldn't be useful if you wanted discover non-packaged files
during every backup.
The initial "find" takes a while as well as the initial "dpkg --search".
But after that, the package database maybe fits in kernel filesystem
buffer(s)--there is a significant speedup for searches done after the
first one.
Florin's approach also sounds fine (let's call it the "reverse map") and
might be faster. dpkg is slower than I anticipated. My approach should
be conservative enough in that it will catch anything not directly
represented in the package database. Excluding /var, /proc, /sys and
such is a good idea. Let's try again. This version ignores everything
except /etc on my Ubuntu 8.10 laptop... took about 10 minutes to run.
Meh.
-------------------------8<-------------------------
#!/bin/sh
# find_unpackaged.sh
#
# Find unpackaged (unknown to dpkg) files/directories.
#
# Discarding standard error isn't very elegant.
#
# (C)2008 Adam Monsen
# License: GNU General Public License version 3 (or later)
find / \
-path '/.*' -prune -o \
-path '/bin*' -prune -o \
-path '/boot*' -prune -o \
-path '/cdrom*' -prune -o \
-path '/dev*' -prune -o \
-path '/home*' -prune -o \
-path '/initrd*' -prune -o \
-path '/lib*' -prune -o \
-path '/lost+found*' -prune -o \
-path '/media*' -prune -o \
-path '/mnt*' -prune -o \
-path '/opt*' -prune -o \
-path '/proc*' -prune -o \
-path '/root*' -prune -o \
-path '/sbin*' -prune -o \
-path '/srv*' -prune -o \
-path '/sys*' -prune -o \
-path '/tmp*' -prune -o \
-path '/usr*' -prune -o \
-path '/var*' -prune -o \
-path '/vmlinuz*' -prune -o \
-print > /tmp/allpaths.txt \
2>/dev/null
for i in `cat /tmp/allpaths.txt`
do
# show progress with dots
echo -n .
if ! dpkg --search $i > /dev/null 2>&1
then echo $i >> /tmp/unknown.txt.TMP
fi
done
# since packages have multiple files
sort /tmp/unknown.txt.TMP | uniq > /tmp/unknown.txt
------------------------->8-------------------------
To get any real performance we're probably going to need something more
sophisticated than a shell script.
But it looks like it did work... /tmp/unknown.txt contains over 1,000
lines, and has stuff like /etc/hosts, /etc/aliases, /etc/timezone, and
other stuff that should probably be backed up.
--
Adam Monsen
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part
Url : http://mailman.mn-linux.org/pipermail/tclug-list/attachments/20090101/ab06eaf5/attachment.pgp