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'
    Meine VDRs

    VDR 1: Point of View Ion-330-1, 2x Sundtek MediaTV Pro (DVB-C), Atric IR-Einschalter Rev.5, Ubuntu 18.04 (yavdr-ansible)
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    VDR 3: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 18.04 (yavdr-ansible), VDR 2.4.1, CIR-Empfänger
    Client 1: Raspberry Pi 2, Arch Linux ARM, VDR 2.3.8
    vdr-epg-daemon auf Cubietruck mit 32 GB SSD, Arch Linux ARM

    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

    Mein (neuer) VDR:

    Software:
    Debian Wheezy mit Kernel 3.14
    VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
    noad 0.8.6

    Hardware:
    MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
    32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
    TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
    Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
    PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

  • 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

    Mein (neuer) VDR:

    Software:
    Debian Wheezy mit Kernel 3.14
    VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
    noad 0.8.6

    Hardware:
    MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
    32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
    TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
    Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
    PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

  • 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

    Edited once, last by Bert (November 27, 2023 at 10:38 PM).

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

    Gruss
    SHF

    Mein (neuer) VDR:

    Software:
    Debian Wheezy mit Kernel 3.14
    VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
    noad 0.8.6

    Hardware:
    MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
    32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
    TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
    Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
    PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

    Edited once, last by SHF (November 28, 2023 at 12:01 AM).

  • 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

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!