등 의 find
파일 속성으로 검색할 수 있습니다 .-type
-executable
기존 파일 목록에서 유사한 기능을 얻으려면 어떻게 해야 합니까? 예를 들어 출력 dpkg -L <package_name>
.
파이프 to ls -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
가능성은 무궁무진합니다!
처음 두 형식은 두 개의 프로세스만 시작하므로 일반적으로 더 이상적이라고 생각합니다. 그러나 루프는 for
각 파일에 대해 하나의 프로세스를 시작합니다.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
데비안 아카이브의 현재 버전은 사악한 구문 분석을 수행하는데 ls
, 이는 특정 상황에서는 상대적으로 안전합니다. 아직까지 공개되지 않은 업데이트들 stat
... 아마 연말이 되기 전에 작업을 끝내고 데비안에 업로드할 것 같습니다.
그런데 , 및 옵션 이 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
하고 매뉴얼 페이지를 하나씩 읽을 수 있습니다.
$ dlocate -lsman gawk | xargs man