파일 속성을 기준으로 파일 목록 필터링

파일 속성을 기준으로 파일 목록 필터링

등 의 find파일 속성으로 검색할 수 있습니다 .-type-executable

기존 파일 목록에서 유사한 기능을 얻으려면 어떻게 해야 합니까? 예를 들어 출력 dpkg -L <package_name>.

파이프 to ls -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

가능성은 무궁무진합니다!

처음 두 형식은 두 개의 프로세스만 시작하므로 일반적으로 더 이상적이라고 생각합니다. 그러나 루프는 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래퍼 등을 작성했습니다 . 또한 보다 빠르게 검색합니다 .dpkggrep-dctrldpkgdpkg -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

관련 정보