Beiträge von Bert

    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.

    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.

    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

    Hi,


    Ja also pidof PID zeigt leider gar nix an, aber ps -aux | grep PID und zwar das:

    Code
    vdr         1833  0.0  0.0 237292  4996 ?        Sl   21:49   0:00 /usr/libexec/geoclue-2.0/demos/agent
    yavdrus+   10364  0.0  0.0   9420   724 tty3     S+   22:11   0:00 grep --color=auto 1833

    Sagt mir aber gar nichts.

    Habe nun mal meine host_vars/localhost einfach gelöscht und das Script mittels "sudo -H ./install-yavdr.sh" gestartet

    dabei kommt auch das Problem mit dem Prozess der blockiert doch in diesem Fall nützt es wenn ich die PID dieses Prozesses kille

    und das Script läuft danach fehlerfrei durch. Mache ich das hingegen mit meiner host_vars/localhost geht das nicht.


    Grub Bootmenü ist auch wieder weg nun, aber ich kanns erreichen beim Start mit der Shifttaste und schnell ne Cursertaste nach unten da der Timeout

    und überhaupt nichts was ich in die /etc/default/grub eintrage greift.

    Das muss ich jetzt mal richtig lösen da das bei einem MultibootSystem nicht günstig ist.


    In meiner host_vars/localhost steht ja z.b:

    Code
    # settings for grub
    grub:
      timeout: 10
      boot_options: quiet splash

    Das würde vermutlich helfen aber mit meiner localhost läuft ja nichts durch (greift also nicht), ich probier mal:

    Code
    cd yavdr-ansible
    sudo -H ansible-playbook yavdr07.yml -b -i 'localhost_inventory' --connection=local --tags="grub-config"

    Edit, Das hat geklappt, hätte ich das mal früher gewusst dann hätte ich mir die Prozedur aus Post #7 und vor Allem aus Post #9 erspart.

    Ich versteh das nicht ich will das Script also "sudo -H ./install-yavdr.sh" nochmal laufen lassen doch es kommt immer:

    Code
    TASK [yavdr-common : create vdr user] *******************
    fatal:[localhost] : FAILED! => {
    "changed" : false,
    "name" : "vdr"
    "rc" : 8
    }
    
    MSG:
    usermod : Benutzer vdr wird derzeit von Prozess 11859 verwendet

    Ich habe das nun sicher 7x hintereinander probiert mit auch vorher vdr stoppen, Prozess killen ist jedesmal eine andere PID, Kompletter Neustart

    aber es läuft nie durch (kurz vor dem Fehler wird auch immer der VDR vom Script gestartet).

    Hi,


    Gut also zurück zum eigentlichen Problem, ich häng mal ein bisschen syslog vom Vdr Start an

    (da sieht man schon ein paar Fehler drinnen, kann aber nichts damit anfangen), auch:

    no DVB device found

    steht da unter Anderem - ist wohl auch nicht so gut.

    Vielleicht sieht ja jemand wos hakt.

    syslog_start_vdr_auszug.txt


    Gruss

    Bert

    Hi,


    Danke für die Links - seh ich mir an.

    Hatte es in der Zwischenzeit geschafft die Probleme zu vergrössern ^^

    Habe mittels USB Bootmedium per boot-repair (mit Optionen wie u.a. purge grub usw..) den Grub im yavdr ansible neu installieren können, das hat zwar den Grub Boot-Auswahlbildschirm zurück gebracht doch nun war nur noch yavdr ansible auswählbar - also nicht der grosse Wurf.


    Danach blieb mir nichts anderes übrig als per chroot Methode den Grub vom Kubuntu-20.04 wiederherzustellen was auch geklappt hat, nun konnte

    ich wieder alle drei Betriebssyteme auswählen und auch hochfahren.

    Nun aber steht natürlich als erster Booteintrag im Auswahlbildschirm das Kubuntu-20.04 was ich aber so nicht will, denn wenn ich mal einfach hochfahre soll default (falls ich nichts anderes auswähle) das yavdr ansible hochfahren nach dem Timeout.


    Normalerweise hatte ich wenn sich das durch ein Update vom Kubuntu-20.04 geändert hat immer einfach folgendes getan im yavdr ansible:

    Code
    sudo grub-install /dev/nvme0n1p6  # das entspricht der yavdr partition
    sudo update-grub

    Und danach war wieder yavdr ansible an erster Position im Boot-Auswahlbildschirm.

    Doch seit ich boot-repair verwendet habe findet der Grub im yavdr ansible kein weiteres Bertriebssystem, das ändert sich auch dann nicht wenn

    ich von einem USB Bootmedium (Kubuntu-20.04 Desktop.iso) die chroot Methode um den Grub wiederherzustellen anwende also das mache:

    Code
    sudo mount /dev/nvme0n1p6 /mnt
    sudo mount /dev/nvme0n1p1 /mnt/boot/efi
    for dir in /dev /dev/pts /proc /sys /run; do sudo mount --bind $dir /mnt$dir; done
    grub-install
    update-grub

    Mache ich das selbe oben im Code aber mit /dev/nvme0n1p5 für den Grub im Kubuntu-20.04 werden alle Betriebssyteme gefunden.


    Was kann ich noch tun oder bleibt mir wirklich nichts anderes übrig als die Ubuntu Server Distri und yavdr ansible neu zu installieren?

    Genau das wollte ich eigentlich vermeiden.


    Habe noch eine Reinstallation vom Grub im yavdr ansible selbst versucht aber dabei wird os-probe nicht mehr gefunden nun und es ändert nichts am Problem, vielleicht ist ja genau das das Problem wegen os-probe


    Edit, oh sehe gerade das Paket sollte ja os-prober lauten, wie blöd.

    new Edit, ok Kommando retour - die Grub Probleme sind nun behoben mit einer neuen Reinstallation vom Grub direkt im yavdr ansible diesmal mit dem korrekten Paketnamen also einfach mit:

    Code
    sudo apt-get --reinstall install grub-common grub-efi-amd64 os-prober

    ist wenigstens diesbezüglich alles wieder im Lot.


    Gruss

    Bert

    Hi,


    Ich weiss nicht was das für ein Prozess ist die PID ist jedenfalls immer eine andere, doch das ist nun eh egal denn es hat jetzt plötzlich doch geklappt

    auf ganz normalem Weg also PID killen und das Script ist danach durchgelaufen (Bild und Ton gibts jedoch nicht) nur das Yavdr Logo ist zu sehen.

    Im Moment habe ich aber neue Probleme plötzlich seit dem Ausführen und erfolgreichem Durchlaufen des Scripts sehe ich den BootManager (Grub)

    also das Auswahlfenster nicht mehr.


    Es fährt immer sofort das Yavdr hoch, kann kein anderes Bertriebssystem mehr starten, habe nachgeguckt in der /etc/default/grub und da stand plötzlich das drinnen:

    Code
    GRUB_TIMEOUT_STYLE=hidden
    GRUB_TIMEOUT=0

    Dachte ok das ist das Problem, doch nach Umstellen zu:

    Code
    GRUB_TIMEOUT_STYLE=menu
    GRUB_TIMEOUT=10

    und anschliessendem sudo upodate-grub ändert sich nichts, das Problem bleibt hartnäckig bestehen.

    Macht yavdr da was extra mit grub ich meine gibts da irgendwelche default templates die da dazwischenfunken (bin absolut nicht up-to-date das macht alles schwieriger).

    Hmm, Sript (sudo -H ./install-yavdr.sh) neu angestossen Fehlermeldung ansible Version zu alt

    Also Ordner yavdr-ansible gelöscht, neu aus Git ausgescheckt, wieder Script gestartet.


    Code
    TASK [yavdr-common : create vdr user] *******************
    fatal:[localhost] : FAIKLED! => {
    "changed" : false,
    "name" : "vdr"
    "rc" : 8
    }
    
    MSG:
    usermod : Benutzer vdr wird derzeit von Prozess 11859 verwendet

    sudo apt update

    sudo apt dist-upgrade

    hat das Problem tatsächlich gelöst doch nun kommt der VDR nicht mehr hoch es ist nur noch das blaue yavdr Logo zu sehen

    aber kein Bild vom Sender.

    Hi,


    Eventuell hat das nur bedingt mit yavdr zu tun, aber ich frag mal hier (wenn es hier nicht passt bitte verschieben).

    Habe ein Multiboot System also einmal Win 10, einmal Kubuntu-20.04, und einmal yavdr Ansible, bislang hat alles weitgehends reibungslos geklappt

    und ich konnte alle drei Systeme über Grub booten wobei im Bios unter Boot -> Sicheres Booten immer Uefi Windows eingestellt war.

    Doch neulich habe ich das Kubuntu-20.04 upgedatet (nur Pakete aktualisiert) und nun fährt yavdr nur noch hoch wenn ich im Bios

    bei Boot -> Sicheres Booten auf "anderes Betriebssystem" umstelle.

    Wie das sein kann ist mir nicht klar denn das yavdr Ansible habe ich ja nicht angerührt


    Wie geht das (kann ja eigentlich damit das ich das Kubuntu-20.04 upgedatet habe nichts zu tun haben) ?

    Sollte man das yavdr Ansible ab und zu auch mal updaten um sowas zu vermeiden ? Eventuell liegt das Problem ja genau daran

    weil ich yavdr Ansible bisher noch nie upgedatet habe.


    Wenn ich unter Boot -> Sicheres Booten auf Uefi Windows umstelle kann ich nur noch Win10 und das Kubuntu-20.04 hochfahren, versuche ich so das yavdr Ansible hochzufahren kommt die folgende Meldung: bad shim signature - you need to load the kernel first


    Gruss

    Bert

    Hi seahawk1986,


    Danke, ist auch wenn wackelig trotzdem ne gute Lösung.

    Hatte mir derweil das gebastelt,


    Das klappt gar nichtmal so schlecht (verwende #!/bin/sh) , und ist auch schön kurz, doch mich stört halt das man dabei bei 1-9 immer ne Null zuvor mit angeben muss.


    Gruss

    Bert

    Hi All,


    Hab hier ein komplexeres Script und darin z.b: nen Part wie folgt,

    Code
    echo -e "$green"
    while true; do
        read -p "how many EXTRA_PARTITIONS do you want to create ? " -n 1
        case $REPLY in
            [1-9]* ) EXTRA_PARTITIONS=$REPLY && echo -e "\nchosen was -> ${blue}$EXTRA_PARTITIONS${green}\n" && break;;
                * ) echo -e "\n${yellow}please answer with numbers from 1 to 9.${green}\n";;
        esac
    done


    Das funktioniert ja auch wunderbar, doch möchte ich das nun erweitern so das auch eine zweistellige Angabe möglich ist also in etwa so,

    Code
    echo -e "$green"
    while true; do
        read -p "how many EXTRA_PARTITIONS do you want to create ? " #-n 2
        case $REPLY in
            [0-9]|[1-6]* ) EXTRA_PARTITIONS=$REPLY && echo -e "\nchosen was -> ${blue}$EXTRA_PARTITIONS${green}\n" && break;;
                * ) echo -e "\n${yellow}please answer with numbers from 1 to 16.${green}\n";;
        esac
    done


    Das klappt auch, doch so kann ich keine Limitierung haben also ich möchte ja nicht mehr als 16 Partitionen erlauben.

    Bei dieser Variante kann ich ja leider auch z.b: 17 wählen, und leider geht das so auch nur mit nachfolgenden Druck auf die Enter Taste.


    Ich hätte also gerne das man nur ne Zahl zwischen 1 - 16 wählen kann und sonst gar nix anderes angeben kann, und am Liebsten

    auch noch ohne danach die Enter Taste drücken zu müssen.


    So klappt das ja bei der obersten Variante, doch eben nur von 1 - 9.


    Wenns dann nur mit z.b: von 01 - 16 klappt und ich so keine Enter Taste drücken muss wäre das auch ok, dann müsste ich danach

    halt noch die führende Null löschen da das komplette Script etwas gross ist mittlerweile und von dieser Auswertung einiges abhängt

    (müsste sonst wieder einiges mehr im Script ändern).


    Hat jemand ne Idee ?


    EDIT !

    Also so ginge es fürs Erste,

    Code
    echo -e "$green"
    while true; do
        read -p "how many EXTRA_PARTITIONS do you want to create ? " -n 2
        case $REPLY in
            [0][1-9]|[1][0-6]* ) EXTRA_PARTITIONS=$REPLY && echo -e "\nchosen was -> ${blue}$EXTRA_PARTITIONS${green}\n" && break;;
                * ) echo -e "\n${yellow}please answer with numbers from 01 to 16.${green}\n";;
        esac
    done


    Gäbe es ne schönere Lösung als mit führender Null und dennoch nicht die Enter Taste zu benötigen

    (egal ob ein oder zweistellige Eingabe) ?


    Gruss

    Bert

    Hi,


    Ihr seid super :)

    Das haut soweit alles hin nun, das von rfu mit dem export (an das hab ich nicht mal gedacht), sieht jetzt insgesamt wie folgend aus

    wobei ich das mit dem Code von FireFly getestet habe, also so:


    Auch das von HelmutB mit eval haut super hin, sieht so aus:


    Also alles super, nun muss ich noch gucken mit nem array wie von seahawk1986 vorgeschlagen, aber sind jetzt schon schöne kurze Lösungen.

    Hab ja schon öfters mal arrays in Scripts eingebaut aber noch nicht für so nen Fall (steh da immer noch am Schlauch) aber das wird schon noch.


    Vielen Dank an alle Beteiligten hier :] kann man nun eigentlich als gelöst betrachten den Thread.



    Gruss

    Bert

    Hi Jungs,


    Das sind alles schöne Ansätze, aber ich steh dennoch immer wieder vor dem selben Problem.

    Ich versuch das jetzt mal besser bzw. genauer zu erklären was ich eigentlich will, es ist wie folgt;


    Ich möchte in ner Schleife interaktiv die size abfragen wobei die size is nix anderes als ne Grösse die man eingibt in Form von Zahlen

    und zwar soll das die Grösse in KiB darstellen.

    wie oft die size abgfragt wird das wiederum hängt von der Variablen parts ab, also z.b: wenn

    parts=4

    dann wird die size 4x abgefragt, bis hierher keinerlei Problem

    doch möchte ich mittels nem Zähler der mit (z=1) anfängt pro Schleifendurchlauf an die variable size ne Nummer anhängen.


    also wenn nun size gefüllt ist mit z.b: 5555555 so das echo "$size" eben 5555555 ausgibt möchte ich diese Variable (jetzt mal grob gesagt)

    quasi umbenennen so das size nachher size_1 ist und echo $size_1 die 5555555 ausgibt.

    Beim nächsten Schleifendurchlauf wird dann der Zähler erhöht mit z=$((z+1)) und dann sollte aus size mit was immer diese Variable nun gefüllt wurde

    size_2 werden usw...


    Hab da ziemlich einfach gedacht und dachte das kann doch in der bash nie ein Problem sein und es würde das folgende genügen,

    also wenn da nun wie von FireFly statt der REPLY variablen value verwendet wird:

    Code
    read -n 7 -p "please enter the size in KiB for size[$i]: "  value

    dann dachte ich, ok ich mach mal:

    Code
    size_${z}=$value

    doch das klappt ja nicht.


    Dank FireFly weiss ich nun das sowas stattdessen klappt:

    Code
    size[$z]=$value

    doch ist das ja dennoch keine Variable die ich so weiter verwenden kann, denn ein echo $size[$z] gibt ja jetzt lediglich den Zähler aus

    also die variable z und das in eckigen Klammern.


    Vereinfacht gezeigt sieht man das Problem wie folgt am Besten denke ich:


    klappt nicht:

    Code
    size=5555555
    z=3
    $size${z}=$size
    -bash: 55555553=5555555: command not found

    hingegen ohne variable für den Zähler (z) klappt das problemlos:

    Code
    size=5555555
    size_3=$size
    echo $size_3
    5555555


    Ich hab ne Lösung aber die benötigt keinerlei array, und braucht aber zwei while Schleifen sowie ein case und innerhalb vom case ein paar if elif Abfragen also so:

    Code
    if [ "$z" = "1" ] ; then
        size_1=$size
    elif [ "$z" = "2" ] ; then
        size_2=$size
    usw...


    Das klappt dann natürlich, allerdings hatte ich gehofft das kürzer hinzubekommem, ich bin nicht sicher ob sowas mit nem array und ohne den ifs

    hinzubekommen ist, doch wenn das ginge würd ich gerne wissen wie ?



    Hier mal meine derzeitige Lösung:

    wobei die Variable parts und DEV usw.. frage ich eh auch bereits an anderer Stelle interaktiv ab (das hier ist halt nur der relevante Codeschnipsel

    und damit der funktioniert (falls den jemand testen will - Script tut eh nix wirkliches bzw. gefährliches) hab ich diese Variablen derweil so darin vorgegeben.


    und so sieht das bei der Ausführung aus:


    Gruss

    Bert