-->

2011-05-24

qfileのサンプル

qfileにはファイルのリストを指定できます。
$ man qfile
パッケージの残骸や独自に設置したファイルなどを検索するのに使えます。
man qfileのサンプルをいくつか下記に記します。

パッケージに属していないlibtoolのライブラリ?
$ qfile -o $(find /lib* /usr/lib* -name "*.la")
$ find /lib* /usr/lib* -name "*.la" | qfile -o -f -

パッケージに属していないコマンド?
シンボリックリンクはリンク先を見たほうが良いようです。
$ find /bin/ /sbin/ | qfile -o -f -
$ find /bin/ /sbin/ -type f -exec echo -n {}"::" \; -exec head -n1 {} \; | grep '#!/bin/sh'

パッケージに属していない/etc/以下等のファイル?
#!/bin/bash
PATH="/bin:/usr/bin"
SEARCH_PATHS=""
SEARCH_MASK=""
EXCLUDE=""
SEARCH_PATHS="$(portageq envvar CONFIG_PROTECT)"
SEARCH_MASK="$(portageq envvar CONFIG_PROTECT_MASK)"
for path in ${SEARCH_MASK} ; do
    EXCLUDE="${EXCLUDE} -not -path ${path}/*"
done
set -f
DIR_LIST="$(find ${SEARCH_PATHS} ${EXCLUDE} -type d | qfile -o -f - | sort)"
TMP_LIST=""
FLAG=0
for path1 in ${DIR_LIST}; do
    FLAG=0
    for path2 in ${TMP_LIST}; do
        if [[ "$path1" =~ ^"$path2/" ]]; then
            FLAG=1
            break
        fi
    done
    if [[ $FLAG -eq 0 ]]; then
        TMP_LIST="${TMP_LIST} $path1"
    fi
done
DIR_LIST=$TMP_LIST
for path in ${DIR_LIST} ; do
    EXCLUDE="${EXCLUDE} -not -path ${path}/*"
done
find ${SEARCH_PATHS} ${EXCLUDE} -type d | qfile -o -f - | sort | awk '{print "DIR ::"$0}'
find ${SEARCH_PATHS} ${EXCLUDE} -type f | qfile -o -f - | sort | awk '{print "FILE::"$0}'
find ${SEARCH_PATHS} ${EXCLUDE} ! -type d ! -type f ! -type l | qfile -o -f - | sort | awk '{print "UNKN::"$0}'
rpath=""
for path in $(find ${SEARCH_PATHS} ${EXCLUDE} -type l | qfile -o -f - | sort); do
    rpath=$(realpath $path)
    if [ "$rpath" = "" -o "$(qfile $rpath)" = "" ]; then
        echo "LINK::"$path" -> "$rpath
    fi
done

0 件のコメント: