Classificar a saída do grep por tamanho do arquivo? (bate)

Classificar a saída do grep por tamanho do arquivo? (bate)

Quero usar o grep para uma determinada string, em um determinado diretório. Então quero classificar os arquivos por tamanho (o número de bytes seria suficiente). Os arquivos são arquivos .php, embora eu não ache que outros arquivos não-php tenham a string que estou procurando. Como eu faço isso?

Eu peguei a parte do grep:

grep -rl "foostring" ~/myfolder

Responder1

Arquivos em ordem decrescente de tamanho:

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
}

Suporta qualquer caminho escapando do shell da saída.

Pré-requisitos: GNU sed/ grep, Bash 4.

informação relacionada