grep의 출력을 파일 크기별로 정렬하시겠습니까? (세게 때리다)

grep의 출력을 파일 크기별로 정렬하시겠습니까? (세게 때리다)

특정 디렉토리에서 특정 문자열을 찾고 싶습니다. 그런 다음 파일을 크기별로 정렬하고 싶습니다(바이트 수는 괜찮습니다). 파일은 .php 파일이지만, PHP가 아닌 다른 파일에는 내가 찾고 있는 문자열이 있을 것이라고 생각하지 않습니다. 어떻게 해야 하나요?

나는 grep 부분을 얻었습니다.

grep -rl "foostring" ~/myfolder

답변1

크기가 줄어드는 순서대로 파일:

matching_files_by_size() {
    local matching_paths path
    mapfile -d '' -t matching_paths < <(grep --files-with-matches --null --recursive "$@")
    for path in "${matching_paths[@]}"
    do
        printf '%s\t%q\n' "$(du --bytes -- "$path" | cut --fields=1)" "$path"
    done | sort --key=1 --numeric-sort --reverse | cut --fields=2
}

출력을 셸 이스케이프 처리하여 모든 경로를 지원합니다.

전제 조건: GNU sed/ grep, Bash 4.

관련 정보