find und stat aber Grösse human readable

  • Hi,


    Also ich will meine Filme auf Platte (nur erstmal mkv usw..) in eine Liste schreiben, dazu habe ich das:

    Code
    find "/hdd/records" -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" \) -print0 | xargs -0 stat -c '%n %s %y' | sort | awk '{print $3"\t\t"$2"\t\t"$1}' >/home/user/liste.txt

    Das klappt ja auch soweit, nur stört mich das stat die Grösse nur in bytes ausgibt.


    Liste sieht dann so aus ( kleiner Auszug):

    Code
    2022-09-28        3753075986        /hdd/records/Action/_mkv/16_Blocks.mkv
    2022-09-28        3771191022        /hdd/records/Action/_mkv/300-Rise_of_an_Empire.mkv
    2022-09-28        4039596823        /hdd/records/Action/_mkv/300.mkv
    2022-09-26        6192036509        /hdd/records/Fantasy/_mkv/Rendezvous_mit_Joe_Black.mkv
    2022-09-26        5675945924        /hdd/records/Fantasy/_mkv/The_Batman.mkv/Fantasy/_mkv/Rendezvous_mit_Joe_Black.mkv
    
    usw....

    Nun könnte man stat ja auch per pipe an numfmt übergeben doch das klappt ja so nur wenn

    ich nur die Grösse per stat ausgeben lasse also so ungefähr:

    Code
    find "/hdd/records" -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" \) -print0 | xargs -0 stat -c '%s' | numfmt --to=iec

    Doch so bekomme ich nicht das Datum und den Filmnamen was ich aber natürlich auch brauche, gibt es da einen Weg um mit stat Datum, Name, und Grösse zu bekommen wobei man aber nur die Grösse an numfmt weitergeben kann mittels Pipe?

    Ich hätte das gerne so wie ganz oben im Code also alles in nur einer Zeile.


    Gruss

    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Man kann sich ggf. mit dem printf Kommando für find das Leben etwas leichter machen und numfmt lässt sich sagen, welches Feld es beackern soll:


    Code
    find "/hdd/records" -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" \) -printf "%CY-%Cm-%Cd\t%s\t%p\n" \
        | numfmt --field=2  --to iec -d $'\t'

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Hi,


    Danke das klappt hier leider nicht - hatte vergessen zu erwähnen mein find kennt kein printf (busybox find)

    gibts sonst keine Lösung?

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Notfalls liefert auch ls -lsh die gewünschten Informationen.
    Wenn es mit find direkt geht, sollte man das aber vorziehen, das wird deutlich schneller sein.

    Gruss
    SHF


  • Hi,


    Ja ich habe auch eine Lösung mit ls wie folgend:

    Code
    find "/hdd/records" -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" \) -print0 | xargs -0 ls -lh | sort -k9,9 | awk '{print $6,$7,$8"\t\t"$5"\t\t"$9}' >/home/user/liste.txt

    aber da passt auch wieder etwas nicht da ls das Datum z.b: für den Tag von 1.-9 so ausgibt:

    4. Dez 2022

    ansonsten aber ab 10ten Tag so:

    11. Dez 2022

    und da sieht die Ausgabe dann so aus:

    Code
    28. Sep 2022        5,3G        /hdd/records/Action/_mkv/Black_Hawk_Down.mkv
    4. Dez 2022        4,4G        /hdd/records/Action/_mkv/Black_Rain.mkv

    Ich habe da also trotz der Tabs keine einheitliche Linie.

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

  • Probier mal:

    ls -sh --full-time

    Gruss
    SHF


  • Ja sehr gut, das sieht gut aus, habe den Code nun so:


    Code
    find "/hdd/records" -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" \) -print0 | xargs -0 ls -lh --full-time | sort -k9,9 | awk '{print $6"\t\t",$5,"\t\t"$9}' >/home/user/liste.txt

    oder so, kommt aber das Gleiche dabei raus (nimmt sich also nix):

    Code
    find "/hdd/records" -type f \( -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" \) -print0 | xargs -0 ls -sh --full-time | sort -k10,10 | awk '{print $7"\t\t",$1,"\t\t"$NF}' >/home/user/liste.txt

    Trotzdem hätte mich auch eine Lösung mit stat interessiert (mit find allein geht ja leider nicht hier).

    Ich finde hier nicht einmal das Paket findutils wo ja das vollwertige find drinnen sein sollte also muss ich wohl mit dem abgespeckten busybox find leben.

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

    Einmal editiert, zuletzt von Bert ()

  • Code
    stat -c '%y %s %n' ./Datei | numfmt --field=4 --to=iec

    Gruss
    SHF


    Einmal editiert, zuletzt von SHF ()

  • Ahh jetzt . ich Trottel hab das voll überlesen hat ja seahawk1986 auch schon erwähnt gehabt.

    Danke nochmal ihr zwei :thumbup:


    Gruss

    Bert

    Hardware: Intel Core i9-9900K, ASUS ROG Maximus XI Hero, MSI GeForce GTX 1050 Ti (vdpau), Dvbsky S952 V3 mit 2X DVB-S2 Tuner
    Multibootsystem (yavdr-ansible auf Ubuntu-20.04, Kubuntu-20.04 Focal Fossa, Win10)
    yavdr-ansible, Ausgabe über Nvidia vdpau

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!