などのfind
ファイル属性で検索できます。-type
-executable
既存のファイルリストから同様の機能を取得するにはどうすればよいですか?たとえば、出力dpkg -L <package_name>
。
パイプ tols -ld
またはfile
then 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
ラッパーなどを作成しました。また、より速く検索します。dpkg
grep-dctrl
dpkg
dpkg -s
dlocate
Debianアーカイブの現在のバージョンは悪い解析を行いますが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