Ausgabe von grep nach Dateigröße sortieren? (bash)

Ausgabe von grep nach Dateigröße sortieren? (bash)

Ich möchte in einem bestimmten Verzeichnis nach einer bestimmten Zeichenfolge suchen. Dann möchte ich die Dateien nach Größe sortieren (Anzahl der Bytes wäre in Ordnung). Die Dateien sind .php-Dateien, obwohl ich nicht glaube, dass andere Nicht-PHP-Dateien die gesuchte Zeichenfolge enthalten würden. Wie mache ich das?

Ich habe den Grep-Teil:

grep -rl "foostring" ~/myfolder

Antwort1

Dateien in absteigender Reihenfolge:

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
}

Unterstützt beliebige Pfade durch Shell-Escapen der Ausgabe.

Voraussetzungen: GNU sed/ grep, Bash 4.

verwandte Informationen