ファイル属性に基づいたファイルリストのフィルタリング

ファイル属性に基づいたファイルリストのフィルタリング

などのfindファイル属性で検索できます。-type-executable

既存のファイルリストから同様の機能を取得するにはどうすればよいですか?たとえば、出力dpkg -L <package_name>

パイプ tols -ldまたはfilethen to がgrep正確でも正確でもありません。

awk正確な結果を得るために出力を解析できると思いましたが、ls -ldこれは過度に複雑に見え、実際には一般的な解決策ではありません。最良のシナリオは、findこの目的自体として使用できることです。

答え1

努力する:

stat --printf="'%n' is a %F\n" $(dpkg -L grep)

ディレクトリのみを表示するには、次の手順を実行します。

stat --printf="'%n' is a %F\n" $(dpkg -L grep) | grep ' is a directory$'

または

for f in $(dpkg -L grep)
do
    operms=$(stat --format='0%a' "$f")
    if [ $(( $operms & 0111 )) -ne 0 ]
    then
        echo "$f: executable";
    fi
done

可能性は無関心です!

最初の2つの形式は2つのプロセスしか起動しないので、一般的には理想的だと思います。ただし、ループはファイルforごとに1つのプロセスを開始します。stat

statこの方法でアクセスできるすべてのプロパティについては、マニュアルセクション1のマンページを参照してください。

言及してくれた@Jeff-Schallerに感謝しますstat

答え2

たとえば、testかなり同様の方法で使用できます。find

dpkg -L somepackage | while read -r f; do [ ! -d "$f" -a -x "$f" ] && printf "$f\n"; done

~のためfind ! -type d -executable

答え3

dlocate次のオプションでマイパッケージを使用できます-lsbin

例えば

$ dlocate -lsbin gawk
/usr/bin/gawk
/usr/bin/igawk
/usr/lib/x86_64-linux-gnu/awk/grcat
/usr/lib/x86_64-linux-gnu/awk/pwcat

xargs ls -l長いリストが必要な場合は入力できます。

一人ではできないこれらすべての小さなことをするためにdlocateラッパーなどを作成しました。また、より速く検索します。dpkggrep-dctrldpkgdpkg -s

dlocateDebianアーカイブの現在のバージョンは悪い解析を行いますがls、これは特定の状況では比較的安全です。まだ公開されていないアップデートstat...おそらく年末になる前に仕事を終えてDebianにアップロードするようです。

ところで、とオプションがdlocateあります。-du-lsconf-lsman-md5check

例えば

$ dlocate -lsman gawk
/usr/share/man/man1/gawk.1.gz
/usr/share/man/man1/igawk.1.gz
/usr/share/man/man3/filefuncs.3am.gz
/usr/share/man/man3/fnmatch.3am.gz
/usr/share/man/man3/fork.3am.gz
/usr/share/man/man3/inplace.3am.gz
/usr/share/man/man3/ordchr.3am.gz
/usr/share/man/man3/readdir.3am.gz
/usr/share/man/man3/readfile.3am.gz
/usr/share/man/man3/revoutput.3am.gz
/usr/share/man/man3/revtwoway.3am.gz
/usr/share/man/man3/rwarray.3am.gz
/usr/share/man/man3/time.3am.gz

直接入力しxargs manてマニュアルページを1つずつ読むことができます。

$ dlocate -lsman gawk | xargs man

関連情報