glaskugel
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Vorbemerkung:
Ich habe mir ein Bash-Script gemacht, das Videos nach den Metadaten benennt, zum großen Teil hat das gepasst, aber es kam dazu, dass manche Dateien ein "return" im Namen hatte. Das führte in Folge zu Problemen und ich habe das Script entsprechend angepasst. Das nur mal als Hinweis und sollte eigentlich mit meinem Problem nichts mehr zu tun haben, aber wer weiß. Der folgende Befehl führte mit diesen Dateinamen, die ein Return im Namen haben, zu Problemen, aber Return im Dateinamen gibt es nicht mehr und die Dateien, die Fehlermeldungen brachten, werden nun ohne Warnung kopiert. Kopiert wird von einem LinuxPC zu einer Enigma-Box. $ time lftp -e "mirror -R /videos/movies/mkv/mkv_hd/ /hdd/movie/mkv_hd -e; exit" -u root,xxxx 192.168.178.148
rm: Fataler Fehler: 500 Unknown command.
mirror: Zugriff nicht möglich: 500 Unknown command. (/hdd/movie/mkv_hd/70er)
mirror: Zugriff nicht möglich: 500 Unknown SITE command. (/hdd/movie/mkv_hd/komoedie)
mirror: Zugriff nicht möglich: 500 Unknown command. (/hdd/movie/mkv_hd/latin)
^C Ich frage mich, ob es dazu kommen, dass ein Dateiname als Befehl interpretiert werden kann. Der FTP-Server auf der Enigma-Box hat ein Passwort, ohne PW kommt es zu den gleichen Problemen. Ich verstehe "Zugriff nicht möglich" nicht. /hdd/movie/mkv_hd/komoedie zB ist ein Verzeichnis auf der Enigma-Box. drwxr-xr-x 2 root root 4096 Feb 21 02:42 komoedie Der Ftp-Befehl enthält den User root mit PW. Bei Enigma-Boxen ist das mit root so eine spezielle Sache, aber im internen Netz meinetwegen. Interessanterweise ist die Datei dann doch übertragen. Nervt aber, weil jedesmal die vorhandene Datei wieder übertragen wird. Ich verwende lftp weil rsync / ssh für die Engima-Box zu stressig ist.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
glaskugel schrieb:
$ time lftp -e "mirror -R /videos/movies/mkv/mkv_hd/ /hdd/movie/mkv_hd -e; exit" -u root,xxxx 192.168.178.148
Der Teil " -e; exit" sieht nicht richtig aus. Ich würde annehmen, dass das gelöscht werden kann. Wir sehen hier aber wohl eine manuelle Ausführung. Wichtig wäre, das Skript zu kennen und die ausgeführten Schritte zu sehen (set -x ).
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Der Teil " -e; exit" sieht nicht richtig aus.
Für mich auch, aber nur so hat es bisher funktioniert. Dieses lftp scheint wenig genutzt zu sein, ich kenne aber nichts anderes, das spiegeln ähnlich rsync kann. Ich muss zur Enigma möglichst ressourcenschonend wegen schlechter Wifi-Verbindung spiegeln, also gerne andere Vorschläge.
Wir sehen hier aber wohl eine manuelle Ausführung
Ja, damit kann man aber jegliche andere Fehler in meinem Script ausschließen. Ich behaupte, das was mein Script macht, nämlich einen Dateinamen automatisch zu erstellen, macht es. Sollte doch egal sein, ob die Datei abc oder cde heißt. Es geht also nur um den einen Befehl und mittlerweile habe ich folgendes merkwürdiges herausgefunden. 4 verschiedene Enigma-Boxen, gleicher Befehl, 1x problemlos(!), 3x Fehlermeldungen an der gleichen Stelle. Verbindung zur Zgemma via Ethernet, alles ok Verbindung zu 2 AX-Boxen, 1x via Ethernet, 1x via WLAN zu einer anderen, obige Fehlermeldung bei beiden Verbindung zur VU+ via WLAN, gleiche Fehlermeldung
Ich könnte mir vorstellen, dass von Ubuntu-Seite alles ok ist, aber vielleicht die Firmware der Enigma-Boxen ein Problem hat. Jede Box hat eine andere FW und es gibt fast jeden Tag neue FW bei Enigma-Boxen, deren Pakete man besser _nicht_ aktualisiert, sondern neu flasht. Ich denke der nächste Schritt muss sein, die FW zu aktualisieren und schauen was passiert, aber dann alles neu zu konfigurieren ist eine Menge Arbeit und dauerte viele Stunden, also wird das dauern. Anfangs dachte ich an einen HDD-Fehler, aber bei 3 gleichen Boxen bei der selben Datei wäre schon ein großer Zufall. Aber nochmals gerne eine Alternative zu lftp und spiegeln.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Wenn Du das Skript nicht teilen willst, ist das OK. Ich fürchte nur, ich kann Dir dann nicht helfen. Wenigstens führe es selbst mal mit set -x in der zweien Zeile aus, so dass Du siehst, was die Shell während der Abarbeitung so treibt.
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Ich verstehe nicht was das Script bringen soll. Es hat ziemlich viele persönliche Workarounds, die für mich das Problem umschiffen die verschiedenen Metadaten unter 1 Hut zu bringen und das Ergebnis ist nur 1 Dateiname. Die Dateinamen beschränken sich auf US-ASCII und das mit dem Return im Dateinamen war nicht absehbar. Man kann unmöglich alle Metadaten der verschiedenen Video-Formate kennen, sollte aber letztlich egal sein, wenn man die Datei zum Testen händisch auf was einfaches umbenennt. Das Problem ist nur der ftp-Befehl und nichts anderes. Wenn ich den Befehl in der Konsole ausführen und es diese Fehlermeldungen gibt, dann verstehe ich nicht was diese Fehlermeldungen mit dem Script zu tun haben sollen. Mich irritiert viel mehr, dass die Fehlermeldungen von der Enigma-Box abhängen. Jede Enigma-Box wurde an einem anderen Tag installiert, die Zgemma mit der alles läuft, ist bei weitem die neueste Installation. Es half auch nicht die Datei oder das Verzeichnis umzubenennen. Also comedy in komoedie zu ändern und die 1 Datei im Verzeicnis in a.mkv umzubenennen. Im schlimmsten Fall wäre also der Inhalt der Datei das Problem. Die Datei ist eine DVB-S2-AUfnahme und mit Handbrake zu mkv konvertiert. Das sollte IMHO aber doch ftp egal sein. Das Merkwürdige ist ja dann, dass nach der Fehlermeldung die Datei trotzdem übertragen wurde, habe aber noch nicht Prüfsummen vergleichen. Ich denke es macht erst Sinn weiterzuüberlegen, wenn ich eine der Problem-Boxen neu aufgesetzt habe. Wenn es da einen Bug gibt, dann können wir ja bis in alle Ewigkeit überlegen. Ich erinnere, dass irgendwann der Zwang kam, dass dem User root ein PW gegeben werden musste, sonst kam es zu einer (anderen) Fehlermeldung, davor funktionierte ftp (und ich glaube auch ssh) mit dem user root auch ohne PW. Diese Engima-Boxen haben eben eine eigene Philosophie. Andererseits wieder, warum werden fast alle Dateien fehlerfrei übertragen, wenn es was mit einem PW zu tun hat? Ich fürchte, es kann mir sowieso keiner helfen, ist alles zu mysteriös. Auf alle Fälle vielen Dank für deine Bemühungen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
glaskugel schrieb: Ich verstehe nicht was das Script bringen soll. Es hat ziemlich viele persönliche Workarounds, die für mich das Problem umschiffen die verschiedenen Metadaten unter 1 Hut zu bringen und das Ergebnis ist nur 1 Dateiname. Die Dateinamen beschränken sich auf US-ASCII und das mit dem Return im Dateinamen war nicht absehbar. Man kann unmöglich alle Metadaten der verschiedenen Video-Formate kennen, sollte aber letztlich egal sein, wenn man die Datei zum Testen händisch auf was einfaches umbenennt.
Entscheidend ist aber, wie Du den Dateinamen in das Befehlsargument bekommst. Wenn man nicht realistisch sieht, was Du da machst, kann man Dir nicht helfen. Du kannst auch ein SSCCE liefern.
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Mir geht es darum deine Argumentation zu verstehen. Ich habe jetzt eine 2. Enigma-Box, bei der es fehlerfrei funktioniert. Unterschied zu vorher, sie war im Deep-Standbye ausgeschaltet. Am scriot hat sich nichts geändert und für die ftp-Übertragung ist das Script nur eine Vorstufe. Für die ftp-Übertragung braucht es nur die genannte Zeile. Am lftp-Befehl habe ich auch nichts geändert. IMHO ist da irgendwas anderes los. Sobald ich die Datei am PC sehe, egal wie sie heißt und das Video am Ubuntu-PC abspielen kann, sollte ich sie doch per ftp zu einem anderen Linux-System (Enigma-Box) übertragen können, oder? Und wie schon geschrieben, übertragen wird die Datei ja, aber mit Fehlermeldung. Wenn das Problem nun weiter existiert, wenn die Datei manuell (ohne Script) in einen ganz einfachen Namen, zB a.mkv umbenannt wird, dann kann es das Script nicht sein, da die Umbenennung ja nicht durch das Script erfolgt.
Wenn man nicht realistisch sieht, was Du da machst
Doch das sehe ich, Umbenennung durch manuelles Tippen in Thunar und Ausführen des genannten lftp-Befehls in der Konsole. Ich vermute das Problem bei der Enigma-Bpx, was auch da immer Merkwürdiges los ist, vielleicht ein Cache-Problem? Zum Script: Auch da wirst du mir eher nicht helfen können, denn die Ausgabe von mediainfo ist abhängig von der Datei, eine Datei von MediathekView hat andere Metadaten als eine von Handbrake oder eines Camcorders. Da braucht man viel Erfahrung mit Metadaten und kann nur probieren. Irgendwelche unsichtbaren Zeichen muss man abfangen und die findet man erst dann, wenn man so eine Datei hat. Das Script macht nichts anderes als mediainfo_mkvfile=`mediainfo "$mkvfile"` mkvfile ist die gefundene Videodatei und in mediainfo_mkvfile steht die Ausgabe von mediainfo und da ist das Problem, dass man nicht vorhersagen kann, was da für Felder ausgegeben wurden, sondern muss Erfahrung haben, von wo die Datei kommt bzw. wie sie erstellt wurde. Allein schon die zig Codecs habe unterschiedliche Felder zur Folge. Da kann zB eine Audio-Bittiefe (bin ich darüber gefallen, hatte noch nie so was) vermerkt sein oder nicht. Letztlich bleibt aber immer schon irgendwas über, sodass ein Dateiname gebildet werden kann, ob der nun wie gewünscht sinnvoll aussieht oder nicht, ist ein anderes Thema. Aber der Dateiname sollte lftp egal sein. Sehe ich da was falsch? newname=`echo "$newname" | sed -e 's/__/_/g' -e 's/__/_/g' -e 's/\~_/~/g' -e 's/.*/\L&/' -e 's/[ÁáÀàÂâÃãåÅăāảấậắẫạặằẩẩǎ]/a/g' -e 's/[ÆÄäæ]/ae/g' -e 's/[Çç]/c/g' -e 's/ć/c/g' -e 's/č/c/g' -e 's/[ż]/z/g' -e 's/[ÉéÈèÊêËëěếễểệēề]/e/g' -e 's/ỹýÝ/y/g' -e 's/´//g' -e 's/\`//g' -e 's/<//g' -e 's/[=#]//g' -e 's/\%//g' -e 's/>//g' -e 's/[°º]//g' -e 's/ /_/g' -e 's/ /_/g' -e 's/ - /_/g' -e 's/ /_/g' -e 's/___/_/g' -e 's/__/_/g' -e 's/¡//g' -e 's/’//g' -e 's/"//g' -e 's/(//g' -e 's/)//g' -e 's/«//g' -e 's/»//g' -e 's/{//g' -e 's/}//g' -e 's/\://g' -e 's/\!//g' -e 's/\?//g' -e 's/¿//g' -e 's/\[//g' -e 's/\]//g' -e 's/\*//g' -e 's/\&//g' -e 's/+//g' -e 's/΄//g' -e "s/'//g" -e 's/[Ğğ]/g/g' -e 's/[IÍíÌìÎîıİiïīịĩǐ]/i/g' -e 's/[Ññ]/n/g' -e 's/[Öö]/oe/g' -e 's/[ÓóÒòÔôÕõōøơộồọớỏờổỗốợở]/o/g' -e 's/[Œœ]/oe/g' -e 's/[Đđ]/d/g' -e 's/ř/r/g' -e 's/š/s/g' -e 's/[Şşś]/s/g' -e 's/ß/ss/g' -e 's/[Üü]/ue/g' -e 's/[ÚúÙùÛûụưủựứửữǔū]/u/g' -e 's/ž/sch/g' -e 's/∞/infinite/g' -e 's/²/2/g' -e "s/|/\./g" -e "s/…/\./g" -e "s/&/_/g" -e "s/ /_/g" -e "s/'/_/g" -e 's/["“”]//g' -e "s/,//g" -e "s/–/-/g" -e "s/(/_/g" -e "s/)/_/g" -e 's/\.\./\./g' -e 's/\.\./\./g'` Damit werfe ich Sonderzeichen im Dateinamen raus, das wird immer ergänzt, wenn sich wieder ein Sonderzeichen im Dateinamen von neuen Videos findet. filmname=`echo "$mediainfo_mkvfile" | grep "Movie name" | cut -f2-4 -d":" | sed -e 's/^ *//' -e 's/ *$//' -e 's/ /\./g' -e 's/\//-/g'` Vom Prinzip sind das alles Analysen, die Felder der mediainfo-Abfrage analysieren. Das Problem ist, dass man nie vorhersagen kann, welche Felder existieren und ob da vielleicht ein ähnliches Feld auftaucht. Man muss sich also immer überlegen was passieren soll, wenn es ein Feld nicht gibt. bitdepth=`echo "$mediainfo_mkvfile" | grep "Bit depth" | head -n 1 | cut -f2-3 -d":" | sed -e 's/ bits/b/g' -e 's/ //g' -e 's/\:/\./g' -e 's/^ *//' -e 's/ *$//'` Manchmal kann es sinnvoll sein mit "head" zu arbeiten, wenn man sicher sein kann, dass es immer um das 1. Vorkommen geht. In Summe ist das aber alles chaotisch, weil irgendwann kommt wieder eine Datei mit neuen Metadaten, wo etwas nicht passt. Manchmal gibt es auch redundante Befehle, die Leerzeichen am Anfang und am Ende vorsichtshalber zusätzlich löschen, obwohl es das eigentlich nicht geben dürfte. Alles in allem hat das IMHO aber nichts mit meinem ftp-Problem zu tun.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
| newname=`echo "$newname" | sed -e 's/__/_/g' -e 's/__/_/g' -e 's/\~_/~/g' -e 's/.*/\L&/' -e 's/[ÁáÀàÂâÃãåÅăāảấậắẫạặằẩẩǎ]/a/g' -e 's/[ÆÄäæ]/ae/g' -e 's/[Çç]/c/g' -e 's/ć/c/g' -e 's/č/c/g' -e 's/[ż]/z/g' -e 's/[ÉéÈèÊêËëěếễểệēề]/e/g' -e 's/ỹýÝ/y/g' -e 's/´//g' -e 's/\`//g' -e 's/<//g' -e 's/[=#]//g' -e 's/\%//g' -e 's/>//g' -e 's/[°º]//g' -e 's/ /_/g' -e 's/ /_/g' -e 's/ - /_/g' -e 's/ /_/g' -e 's/___/_/g' -e 's/__/_/g' -e 's/¡//g' -e 's/’//g' -e 's/"//g' -e 's/(//g' -e 's/)//g' -e 's/«//g' -e 's/»//g' -e 's/{//g' -e 's/}//g' -e 's/\://g' -e 's/\!//g' -e 's/\?//g' -e 's/¿//g' -e 's/\[//g' -e 's/\]//g' -e 's/\*//g' -e 's/\&//g' -e 's/+//g' -e 's/΄//g' -e "s/'//g" -e 's/[Ğğ]/g/g' -e 's/[IÍíÌìÎîıİiïīịĩǐ]/i/g' -e 's/[Ññ]/n/g' -e 's/[Öö]/oe/g' -e 's/[ÓóÒòÔôÕõōøơộồọớỏờổỗốợở]/o/g' -e 's/[Œœ]/oe/g' -e 's/[Đđ]/d/g' -e 's/ř/r/g' -e 's/š/s/g' -e 's/[Şşś]/s/g' -e 's/ß/ss/g' -e 's/[Üü]/ue/g' -e 's/[ÚúÙùÛûụưủựứửữǔū]/u/g' -e 's/ž/sch/g' -e 's/∞/infinite/g' -e 's/²/2/g' -e "s/|/\./g" -e "s/…/\./g" -e "s/&/_/g" -e "s/ /_/g" -e "s/'/_/g" -e 's/["“”]//g' -e "s/,//g" -e "s/–/-/g" -e "s/(/_/g" -e "s/)/_/g" -e 's/\.\./\./g' -e 's/\.\./\./g'`
|
Das ist ja eine rechte Regexp-Sed-Hölle ☺ . Wusstest Du, dass | sed -e "befehl1" -e "befehl2"
# fast immer äquivalent ist zu
sed "befehl1; befehl2"
|
- einfach Befehle mit Semikolon abtrennen, ein Leerzeichen für's Auge und nächster Befehl. Ich würde ja alle Befehle, die ein c erzeugen (3 Befehle mit 4 Zeichen) in eine Gruppe zusammfassen. Außerdem alle Befehle, die einen Unterstrich erzeugen, zumindest räumlich zusammenfassen, aber wieso nicht auch hier mit einer Gruppe arbeiten? Dann alle Transkriptionen wie ÖöøØ → oe. Dann die zwei Sonderfälle: | "s/∞/infinite/g; s/²/2/g;"
|
und die Zeichen, die durch Nix ersetzt werden, dann als Negation definieren: Das ^ am Beginn einer [...] -Gruppe negiert diese, besagt also: Alles was nicht Buchstabe, Zahl, Unterstrich, Punkt und Bindestrich ist. Der Bindestrich steht dabei üblicherweise für ein von-bis; um den Bindestrich selbst zu negieren platziert man ihn daher ganz an den Anfang oder ganz ans Ende. Backticks solltest Du Dir auch abgewöhnen, die sind seit Jahrzehnten deprecated. Benutz stattdessen $(...) . Bei so vielen Sedbefehlen wird es auch überlegenswert, diese in einer Seddatei zu speichern (z.B.: videoinfo.sed) und sed so aufzurufen: | newname=$(echo "$newname" | sed -f videoinfo.sed)
|
Dann kann die videoinfo.sed so aussehen: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | s/[ÁáÀàÂâÃãåÅăāảấậắẫạặằẩẩǎ]/a/g
s/[ÆÄäæ]/ae/g
s/[čćÇç]/c/g
s/[ż]/z/g
s/[ÉéÈèÊêËëěếễểệēề]/e/g
s/ỹýÝ/y/g
s/∞/infinite/g
s/²/2/g
s/[Üü]/ue/g
s/[ÚúÙùÛûụưủựứửữǔū]/u/g
# Kommentare u. Leerzeichenstrukturierung möglich
s/\~_/~/g
s/.*/\L&/
s/ /_/g
# ...
|
Was macht eigentlich Backslash-L s/.*/\L&/ ? Die Anführungsstriche brauchst Du dann auch nicht, oder die ganzen -e und kein Semikolon.
|
glaskugel
(Themenstarter)
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3453
|
Zuerst danke für die Hilfestellung und ich möchte nicht lernunwillig erscheinen, aber für mich stellt sich oft die Frage schönerer Code oder uralten bewährten Code lassen, auch wenn es durch das Wachsen an Möglichkeiten über viele Jahre chaotisch geworden ist. Wenn ich von Anfang gewusst hätte, was ich will bzw. was da alles kommen wird, dann hätte ich das oft völlig anders kodiert. Bei den Backticks ist das auch so eine Sache, hatte schon mal begonnen die alten Scripts zu ändern, ist viel Arbeit und da es ist das dann besser alles gleich von vorne zu machen oder man lässt es eben. Ob es schöner lesbar ist, kann man unterschiedlicher Meinung sein, ich bin die Backticks gewöhnt und mag sie. Bei neueren Scripts stelle ich um, aber die alten Scripts lasse ich.
einfach Befehle mit Semikolon abtrennen, ein Leerzeichen für's Auge und nächster Befehl
ist auch gewachsen von harmlos kurz und es kommt ja meistens immer nur 1 Zeichen dazu, das ist schnell eingesetzt. Aber du hast ja recht.
Ich würde ja alle Befehle, die ein c erzeugen (3 Befehle mit 4 Zeichen) in eine Gruppe zusammfassen
Ja, aber das ist Arbeit und man kann Fehler beim Ändern machen. Es stellt sich die Frage bei welchem meiner uralten Scripts fange ich damit an.
Bei so vielen Sedbefehlen wird es auch überlegenswert, diese in einer Seddatei zu speichern
Ich mag es nicht, wenn ein Script aus mehreren Dateien besteht, da übersehe ich dann vielleicht was, wenn es irgendwelche andere organisatorische Änderungen gibt.
Was macht eigentlich Backslash-L s/.*/\L&/?
genialer Befehl 😉 L steht für lower und U für upper. Stell dir eine Mp3 vor, die einen Liedtitel aus der CDDB hat, der aus griechischen und türkischen Zeichen besteht. Diesen Titel liest du aus und möchtest daraus einen Dateinamen machen, der nur Kleibuchstaben enthält. echo "ΡΊΤΑ MÜZIĞI" | sed 's/.*/\L&/'
ρίτα müziği Mit UTF-8 ist das kein Problem. Bei reinem Griechisch oder Türlisch kann man noch wandeln und dann mit einem 1 Zeichensatz hin- und herkonvertieren, gemischt steht man an. Kommt zwar nicht sehr häufig vor, aber passiert. Nächste Herausforderung, bei griechisch habe ich versucht, das zu transkribieren, also so zu schreiben wie man es mit deutscher Aussprache sprechen würde. Kann nicht perfekt werden, aber die englische Schriebweise von Griechischem ist genauso schlimm. Denk zB an Heraklion, das Η ist im Griechischen kein dt. H sondern ein I, oder wie im Beispiel ist das Ρ ein R. Manche Befehle lasse ich grundsätzlich mitlaufen, auch wenn man sie in dieser Situation ausschließen könnte. Damit hatte ich kürzlich Probleme: Frame rate : 23.976 (24000/1001) FPS
Frame rate : 46.875 FPS (1024 SPF)
Frame rate : 25.000 FPS Normal war, dass nach dem Zahlenwert FPS kam, plötzlich stand da was dazwischen. Ich habe das quick and dirty abgewürgt, damit das Script weiterlaufen konnte, aber nun überlege ich, wie ich nur den Wert der Bitrate und danach FPS erhalte, wobei ich mir nicht sicher bin, dass FPS immer dabeisteht.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
glaskugel schrieb: Ja, aber das ist Arbeit und man kann Fehler beim Ändern machen. Es stellt sich die Frage bei welchem meiner uralten Scripts fange ich damit an.
Das kann ich beantworten: Bei dem, an dem Du gerade arbeitest. Da hast Du sofort was davon, und der Mensch lebt von Belohnungen. Alle alten Scripte würde ich mir auch nicht vornehmen, aber sukzessive die, die man sich sowieso vornimmt, aufräumen.
Bei so vielen Sedbefehlen wird es auch überlegenswert, diese in einer Seddatei zu speichern
Ich mag es nicht, wenn ein Script aus mehreren Dateien besteht, da übersehe ich dann vielleicht was, wenn es irgendwelche andere organisatorische Änderungen gibt.
Auf der anderen Seite könnte solch eine Transformation fremdländischer Zeichen von mehreren Scripten genutzt werden, wenn das, was man in allen ändern will, auch nur von einem Script verarztet wird. Machst Du da eine Verbesserung, profitieren gleich alle betroffenen Scripte davon. Da übersieht man ja auch leicht mal eines.
Was macht eigentlich Backslash-L s/.*/\L&/?
genialer Befehl 😉 L steht für lower und U für upper. Stell dir eine Mp3 vor, die einen Liedtitel aus der CDDB hat, der aus griechischen und türkischen Zeichen besteht. Diesen Titel liest du aus und möchtest daraus einen Dateinamen machen, der nur Kleibuchstaben enthält.
Ah, danke. Entweder das gab's früher nicht, als ich Sed gelernt habe, oder ich habe es immer mit 'y/[A-Z]/[a-z]/' gelöst. Das aber nur US/EN kann. Manche Befehle lasse ich grundsätzlich mitlaufen, auch wenn man sie in dieser Situation ausschließen könnte. Damit hatte ich kürzlich Probleme: Frame rate : 23.976 (24000/1001) FPS
Frame rate : 46.875 FPS (1024 SPF)
Frame rate : 25.000 FPS Normal war, dass nach dem Zahlenwert FPS kam, plötzlich stand da was dazwischen. Ich habe das quick and dirty abgewürgt, damit das Script weiterlaufen konnte, aber nun überlege ich, wie ich nur den Wert der Bitrate und danach FPS erhalte, wobei ich mir nicht sicher bin, dass FPS immer dabeisteht.
Mit s/([^)]+)// vielleicht? Nach runder Klammer auf alles außer runder Klammer zu beliebig oft, dann runder Klammer zu, löschen. Wenn Du -r bei sed verwendest, dann natürlich Backslashes vor die runden Klammern, außer der ersten schließenden. Bei verschachtelten runden Klammern klappt das aber nicht. Dein Sedkommando habe ich übrigens mit sed selbst in Zeilen zerlegt (siehe dazu auch https://imgs.xkcd.com/comics/regex_golf.png). Den Sedteil in eine Datei kopiert, dann:
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 | sed "s/' -e '/\n/g" sedbefehle
sed -e 's/__/_/g
s/__/_/g
s/\~_/~/g
s/.*/\L&/
s/[ÁáÀàÂâÃãåÅăāảấậắẫạặằẩẩǎ]/a/g
s/[ÆÄäæ]/ae/g
s/[Çç]/c/g
s/ć/c/g
s/č/c/g
s/[ż]/z/g
s/[ÉéÈèÊêËëěếễểệēề]/e/g
s/ỹýÝ/y/g
s/´//g
s/\`//g
s/<//g
s/[=#]//g
s/\%//g
s/>//g
s/[°º]//g
s/ /_/g
s/ /_/g
s/ - /_/g
s/ /_/g
s/___/_/g
s/__/_/g
s/¡//g
s/’//g
s/"//g
s/(//g
s/)//g
s/«//g
s/»//g
s/{//g
s/}//g
s/\://g
s/\!//g
s/\?//g
s/¿//g
s/\[//g'
|
Das Apostroph in der letzten Zeile kann man von Hand wegmachen, sowie den Vorlauf in Zeile 1, und dann leicht einzelne oder mehrere Zeilen kopieren, gruppieren, verschieben und löschen. Macht man ein Backup, kann man gut testen, ob die aufgeräumte Datei das gleiche Ergebnis liefert, wie die Urdatei.
|