staging.inyokaproject.org

Umbenennen vieler Dateien mit Hilfe von vielen Textdateien

Status: Ungelöst | Ubuntu-Version: Ubuntu MATE 22.04 (Jammy Jellyfish)
Antworten |

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@cptechnik: In dem Skript ist der Punkt hinter dem do falsch.

Das exit am Ende kann man sich sparen. Das passiert ja auch ohne das man das so explizit hin schreibt.

Die Schleife geht über alle Dateien die dem Muster *.meta entsprechen, der Schleifeninhalt scheint davon auszugehen, dass es *.ts.meta ist. Wenn es also eine *.meta-Datei ohne das .ts vor dem .meta gibt, dann ist das ein Problem.

${…/…/…} ist hier im Grunde die falsche Operation. Man will ja nicht irgendwo das erste vorkommen von .ts.meta ersetzen, sondern das am Ende entfernen/ersetzen.

Die ganzen mv-Zeilen unterscheiden sich nur durch die Dateeindungen — da könnte man eine Schleife drüber schreiben.

Ungetestet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash

for file in *.ts.meta; do
    echo "Diese Datei: $file"
    episode=$(sed -n 3p "$file" 2>/dev/null)
    echo "episode = $episode"
    alt=${file%.ts.meta}
    neu="$alt - $episode"
    echo "$alt"
    echo "$neu"
    for extension in eit ts.ap ts.sc ts.cuts ts.meta ts; do
        mv -v "$alt.$extension" "$neu.$extension"
    done
    echo -
done

Was genau funktioniert denn bei Shares nicht? Fehlermeldung?

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6532

Nach meiner Erfahrung funktioniert das, so wie gedacht, nur wenn das NAS über /etc/fstab eingebunden ist. Anderenfalls müsste man den Weg über den alternativen (umständlichen) Pfad gehen:

/run/user/<UID>/gvfs/...
/run/user/1000/gvfs/...  # Beispiel für Hauptuser

cptechnik

(Themenstarter)
Avatar von cptechnik

Anmeldungsdatum:
28. Dezember 2007

Beiträge: 320

  • Aus der Ferne ist das immer noch ein kleines Problem, da scheinen die zwei Peter nicht derselbe zu sein...

    • Deshalb gehe ich erstmal mit ssh vor ort, das funktioniert

      • Problem nur, dass die Synology Diskstation nicht so einfach mit asynchronen Schlüsseln nicht zurecht kommt (Anhang cp20250722-01.png), daher muss ich immer das entsprechend komplizierte Passwort eingeben...


@Marc_BlackJack_Rintsch ...uff... ich blicke (malebenkurz) nicht ganz dahinter, was Du mir sagen willst...

Ich werde mir das mal in Ruhe ansehen...


...denn... mein Script funktioniert... (an der SSH) jetzt so wie es soll...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash
for file in ./*.ts ; do 
# for file in *.* ; do 
    echo "Diese Datei: $file"
    basis="${file%\.}"
    echo "Basis: $basis"
    episode=$(sed -n '3p' "$file.meta" 2>/dev/null)
        echo "1 episode = $epiode"
#    episode= grep -P '\d{5,10}' "$episode"
    episode=${episode::99}
        echo "2 episode = "$episode
    episode=${episode//./ }
    episode=${episode//,/ }
    episode=${episode//!/ }
    episode=${episode//\?/ }
    episode=${episode//\"/ }
    episode=${episode//:/ }
    episode=${episode//&/ }
    episode=${episode//\"/ }
    episode=${episode//"/"/ - }
    
#    episode=${episode//"Reality-Dokusoap USA 2006Altersfreigabe ab 6"/ - }
    episode=${episode//"Reality-Dokusoap"/}
    episode=${episode//"Altersfreigabe"/}
    episode=${episode//"USA 2006"/}
    episode=${episode//"USA 2007"/}
    episode=${episode//"USA 2008"/}
    episode=${episode//"USA 2009"/}
    episode=${episode//"ab"/}
    episode=${episode//"6"/}
        echo "3 episode = "$episode
    alt=${file/.ts/""}
    neu=${file/.ts/ - $episode}
    echo -----------------------------
    echo ALT $alt
    echo NEU $neu
    
    echo -e "\033[1;33mSoll umbenannt werden?\033[0m" 
read -p "?" antwort
echo -e "\033[1;33m ANTWORT $antwort\033[0m"
if [[ $antwort == "q" ]] 
then 
exit; 
fi

if [[ $antwort != "j" ]]
then
echo -e "\033[0;32m OK, BELASSEN \033[0m"
else
echo -e "\033[1;31m UMBENENNEN: \033[0m"

    mv -v "$alt.eit" "$neu.eit"
    mv -v "$alt.ts.ap" "$neu.ts.ap"
    mv -v "$alt.ts.sc" "$neu.ts.sc"
    mv -v "$alt.ts.cuts" "$neu.ts.cuts"
    mv -v "$alt.ts.meta" "$neu.ts.meta"
    mv -v "$alt.ts" "$neu.ts"

fi

    echo -
done

exit 0

Perfektionieren kann man immer noch... aber es ist eine erheeeeeeebliche Erleichterung...

Neben EBR war ich den Hndflstrr am bearbeiten, und da hat sich usa und doku-seife dazwischengeschoben... Entfernt habe ich die nicht auf die eleganteste Weise, aber es funktioniert, und copy&paste ist im Moment einfacher als ein Array anzulegen und abzufragen... und regex... äh... Muss ich mir da jetzt Gedanken drum machen?

Ich könnte es ja für uns in ein gitTER hochladen... hmmm...


Achso, es ist per fstab eingebunden, aber per CIFS ... und da habe ich die User (uid1000...) nicht verheiratet... vielleicht deshalb...


Habe ich schon DANKE gesagt?

Bilder

cptechnik

(Themenstarter)
Avatar von cptechnik

Anmeldungsdatum:
28. Dezember 2007

Beiträge: 320

cptechnik schrieb:

  • Problem nur, dass die Synology Diskstation nicht so einfach mit asynchronen Schlüsseln nicht zurecht kommt (Anhang cp20250722-01.png), daher muss ich immer das entsprechend komplizierte Passwort eingeben...

...korrekte Permissions in homedirs...

https://github.com/007revad/Synology_SSH_key_setup?tab=readme-ov-file#6-setting-correct-permissions

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@cptechnik: Was da mit $basis gemacht wird funktioniert nicht. Da muss die komplette Endung stehen, nicht nur der Punkt. Der muss auch nicht durch einen \ geschützt werden. Aber $basis wird dann ja auch nicht weiter verwendet, das kann also einfach raus.

Beim ersten Ausgeben der Episode ist ein Tippfehler im Variablennamen — es fehlt das s in $episode. Bei der zweiten Ausgabe ist die Variable ausserhalb der Anführungszeichen und damit „word splitting“ ausgesetzt.

Die doppelten Anführungszeichen werden zweimal durch ein Leerzeichen ersetzt. Man kann die ganzen Einzelzeichen die durch ein Leerzeichen ersetzt werden auch in einer Ersetzung zusammenfassen, wo man die Zeichen in […] einfasst.

Bei den Teilen die entfernt werden sollen, würde sich eine Schleife anbieten.

Für das abbrechen mit q ist ein komplettes if, then, fi IMHO ein bisschen übertrieben. Das könnte man mit Test und && kompakter lösen. Und ich würde da auch eher die Schleife abbrechen und nicht gleich das ganze Skript. Könnte ja sein, dass man irgendwann mal etwas am Schluss machen möchte.

Auch beim Verschieben bietet sich eine Schleife an.

Und es macht eigentlich immer Sinn alles ordentlich einzurücken um den Quelltext leichter verstehen zu können und keine Fehler einzubauen.

Ungetestet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
for file in ./*.ts ; do
    echo "Diese Datei: $file"
    episode=$(sed -n 3p "$file.meta" 2>/dev/null)
    echo "1 episode = $episode"
    episode=${episode::99}
    echo "2 episode = $episode"
    episode=${episode//[.,\!?\":&]/ }
    episode=${episode//\// - }
    for pattern in Reality-Dokusoap Altersfreigabe 'USA 200[6789]' ab 6; do
        episode=${episode//$pattern/}
    done
    echo "3 episode = $episode"
    alt=${file%.ts}
    neu="$alt - $episode"
    echo -----------------------------
    echo "ALT $alt"
    echo "NEU $neu"
    
    echo -e "\033[1;33mSoll umbenannt werden?\033[0m"
    read -rp "?" antwort
    echo -e "\033[1;33m ANTWORT $antwort\033[0m"
    [[ $antwort == "q" ]] && break
    
    if [[ $antwort != "j" ]]; then
        echo -e "\033[0;32m OK, BELASSEN \033[0m"
    else
        echo -e "\033[1;31m UMBENENNEN: \033[0m"
        for extension in eit ts.{ap,sc,cuts,meta} ts; do
            mv -v "$alt.$extension" "$neu.$extension"
        done
    fi
    echo -
done

exit 0
Antworten |