Ordner ohne Space

  • HI Leute,
    also das Script läuft, allerdings hab ich das nur von ner Seite bin nicht so der Scripter.
    Bei mir kommt da leider imme ein Fehler. Hab das über umwege von Windoof kopiert.
    Kann bitte mal einer Testen ob das Script bei ihm geht?



    FehlerBild:
    renaming "./Peter_Lustig" to ""
    renaming "./Peter_Lustig/Peter Lustig.txt" to ""
    sed: -e Ausdruck #1, Zeichen 7: unterminated `s' command
    mv: angegebenes Ziel ââ ist kein Verzeichnis: Datei oder Verzeichnis nicht gefunden


    mfg eimer

    mfg eimer


    VDR1: Debian 2.6.24.2 e-Tobi | AMD Mobile 3000+ (~50W Idle) | K8MM3-V | 256MB | 500GB Samsung | TT2300 DVB-C | KabelBW | lautlos | FUSI Scenic 600

  • Das Script tut bei mir einwandfrei (in entschärfter Fassung ohne tatsächliches mv-Kommando und logging via tee). Vielleicht hat deine sed-Version Probleme mit einem - als Trenner? Kannst ja mal stattdessen # oder , oder / versuchen... :) Oder du hast irgendwo einen Tippfehler drin, den du oben nicht gemacht hast ?(


    ich würd's ja in perl machen ... hrhr

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Zitat

    Hab das über umwege von Windoof kopiert.


    Steckt da vielleicht noch ein Windows-Zeilenumbruch drin? Denn eigentlich® sieht das gut aus.


    Änder' mal die erste Zeilen in

    Zitat

    #!/bin/bash -x


    und lass nochmal laufen.



    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • zirias du redest hier 's-ä-ae-g' von denn trennern oder?
    Dann mach das doch mal in perl :) wir nehmen alle gerne deinen Code.


    umaier:
    Kann sein das sich da einer eingeschlichen hat.
    Das mit dem -x werd ich auf jedenfall versuchen. Leider erst heute Abend bin auf Arbeit.


    mfg eimer

    mfg eimer


    VDR1: Debian 2.6.24.2 e-Tobi | AMD Mobile 3000+ (~50W Idle) | K8MM3-V | 256MB | 500GB Samsung | TT2300 DVB-C | KabelBW | lautlos | FUSI Scenic 600

  • Zitat

    Original von eimer
    zirias du redest hier 's-ä-ae-g' von denn trennern oder?


    Ja


    Zitat

    Dann mach das doch mal in perl :) wir nehmen alle gerne deinen Code.


    Naja, warum sollte ich etwas scripten was ich gar nicht brauche? ;)


    Allerdings sehe ich gerade, dass dieses Script zwangsläufig Mist bauen wird, wenn eines der zu ersetzenden Zeichen in einem Verzeichnisnamen vorkommt...


    edit:Habs mir überlegt, sowas geht ja schnell von daher:



    Da gibt's auch kein Fehlverhalten mit Verzeichnisnamen :) (tabwidth nach perl-vorgabe auf 4 dann passen auch die Einrückungen wieder)

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

    3 Mal editiert, zuletzt von zirias ()

  • Noch kürzer geht's mit recode:

    Zitat

    echo äöü | recode utf8..ascii
    "a"o"u


    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • es? Umlaute in einem String ersetzen? Das war wenn überhaupt wohl nur ein kleines "Teilproblem" von eimer. Und perl ist sowieso immer die Lösung :D

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K


  • Klar geht damit alles, aber sei mal ehrlich: so richtig gut wartbar ist das Zeug nicht, oder?


    uwe


    [EDIT]
    sorry, war ein Typo im Quellcode - hab's gerade noch bemerkt :)
    [/EDIT]

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

    Einmal editiert, zuletzt von umaier ()

  • Hmm kennst du IOCCC? Wartbarkeit ist eben doch keine Eigenschaft der Sprache -- aber definitiv n lustiges Script, was du da ausgegraben hast.

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Ich hatte beruflich schon so manches Projekt in C und in Perl (auch als Coder (um das pöhse Wort "Hacker" nicht zu verwenden)).


    Der Unterschied zwischen beiden ist: C kann man auch so schreiben, dass es andere hinterher noch verstehen.


    Wenn C auf einer Plattform compiliert ist der Fisch (meist) geputzt, bei Perl fängt der Spaß mit der verwendeten Perl-Version auf dem Kundensystem erst so richtig an. Ich mag perl zum Hacken weil's schnell ist, aber wenn die Laufzeit keine Rolle spielt, dann ist mir die Shell lieber (wenn's nicht Solaris oder Windows ist). Zur Realisierung dann am liebsten C.


    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • Ich arbeite auch im großen Umfang mit perl, unternehmensinterne Software. Das gibt weder auf verschiedenen Servern Probleme, noch hat irgendjemand je Schwierigkeiten, meinen Code zu lesen. Der Aufbau der neueren Webanwendungen ist wie aus dem Lehrbuch mehschichtig (mit Template-Toolkit als Benutzerschnittstelle, vergleichbar mit ASP.NET) und vollständig objektorientiert. Man kann in so ziemlich jeder (ernsthaften) Programmiersprache lesbaren Code schreiben. In jedem Umfang.


    Wenn du so ein Fan der Shell bist kannst du ja mal zum Spaß das Skript aus dem Ausgangsposting schön und Bugfrei verfassen :) Meine Perl-Version von oben leistet das jedenfalls, ist sauber geschrieben und läuft auch noch schneller.

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Zitat

    Das gibt weder auf verschiedenen Servern Probleme


    Da sage ich nur "Herzlichen Glückwunsch". Solche homogenen Zielsysteme hätte ich auch gerne - oder so eine geringe Verbreitung.



    So viel ändern würde ich nicht - der Lerneffekt soll ja erhalten bleiben :) .


    Starten würde ich C, sed ist manchmal ein bisschen zickig in UTF8
    Ich würde den Iterationstrenner zunächst um das Leerzeichen befreien, damit auch Dateinamen mit Leerzeichen verarbeitet werden können (IFS=).


    Den find würde ich in eine for-Schleife packen, das macht das ganze leichter les- und debugbar.


    Der tr fliegt raus, das kann sed nämlich gleich mitmachen.


    Als Trenner in sed verwendet ich gerne Zeichen, die nicht im String vorkommen (Solaris spackt da rum).


    Den Block um Zahlen anzuhängen habe etwas umgearbeitet - jetzt gibt's nur maximal 1000 Dateien gleichen Namens, die heissen jetzt aber dann alle <>.0001, <>.0002, ...


    Der Rest bleibt.


    Angewendet auf den VDR würde ich das IFS= weglassen und die for-Schleife mit
    for dir in `find . -type d | sort -r -u`; do
    beginnen.


    Laufen lassen habe ich das ganze natürlich nicht - und so einen schönen Endeinzeiler gibt's bei mir auch nicht.


    uwe

    server: yavdr trusty testing, 2 * L5420, 32GB, 64TB RAID6 an OctopusNet (DVBS2- 8 ) + minisatip@dsi400 (DVBS2- 4 )
    frontends: kodi und xine

  • Ist ganz nett, ja :) definitiv besser lesbar als das Original oben. Den Verzeichnis-Bug hast du ja elegant mit "-type f" umschifft, dadurch werden unerwünsche Zeichen in Verzeichnisnamen allerdings auch nicht mehr gefiltert. Aber immerhin, ob das Anforderung war kann ich ja nicht wissen. Ich würd jedenfalls behaupten, dass der perl-Code hier lesbarer und sauberer ist, und über die Performance müssen wir ja nicht reden :)


    utf-8 ist in dem Zusammenhang noch ein anderes Thema, da wird man mit einem solchen Ansatz eh nichts gewinnen können fürchte ich. Ich weiß ja nicht genau, was das Ziel ist, aber eines ist klar, mit unicode Dateinamen hat man so einige "Sonderzeichen", die irgendwo Probleme bereiten könnten.


    Und mal kurz zu
    - geringe Verbreitung: klar, intern genutzt, eine produktiv-Installation und vielleicht 6 oder 7 Testinstallationen, aber immerhin einge 100 User, die auch fleißig helpdesk-tickets schreiben wenn was hakt...
    - homogene Umgebung: Nunja! Es sind alles IIS Webserver, aber das wars dann mit den Gemeinsamkeiten. Einer hat perl 5.10 (wegen eventuell interessanter utf8-features für die Zukunft), der Rest hat perl 5.8, leider mit vielen unterschiedlichen Konfigurationen und installierten Modulen (NICHT meine Verantwortung) und ausgerechnet der Produktivserver gibt Errors und Warnings ohne zu zögern über http heraus, was dann recht fatal ist. Ich habe unter anderem aus diesem Grund ein sehr robustes exception-Handling entwickelt -- ich weiß das ist ein bisschen ein Reizthema bei perl, aber was soll ich sagen, es funktioniert sehr schön. Alles in allem kann man sagen: Wer sauber codet, den "strict" mode nie verlässt und warnings beherzigt läuft wenig Gefahr, mit fremden perl-Installationen Probleme zu bekommen. Wer noch dazu in der Perl-Doku auch Warnungen zur Portierbarkeit ernst nimmt hat dann auch mit dem Wechsel des Betriebssystems keine Schwierigkeiten mehr. Nicht ohne Grund verwendet mein Script oben zum umbenennen statt rename() File::Copy::move() ;)


    PS: Ich habe sogar schon die ein oder andere bei der Arbeit entwickelte Klasse für meinen privaten Gebrauch unverändert "entliehen" und es war in einer VÖLLIG anderen Umgebung (apache mit mod_perl) dennoch kein Problem

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

    2 Mal editiert, zuletzt von zirias ()

  • Eieiei, noch ne Warnung: Die zweite Shell-Version funktioniert nicht wegen einiger Fehler bei den Variablennamen, das sind allerdings Flüchtigkeitsfehler, was aber wichtig ist: Der Verzeichnis-Bug ist NICHT behoben: Das find-Kommando berücksichtigt zwar nur noch files, ersetzt werden Zeichen aber nach wie vor auf dem ganzen String. Ein "./foo/bär/baz" wird als zu "./foo/baer/baz" und "mv ./foo/bär/baz ./foo/baer/baz" KANN nur schiefgehen, weil "./foo/baer" ja gar nicht existiert.


    Wer die Anwendung ernsthaft braucht sollte einfach meine perl-Version nehmen ;)

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • zirias,
    bei deinem hübschen perl script wird aber ein


    ./bär/foo/baz zu "./baer/foo/baz"


    Da schein auch noch ein kleiner Bug versteckt zu sein ;)

    VDR-Sever: ct-VDR 6 und vdrdevel 1.7.0, AthlonXP1600+,256MB RAM, 1.7TB HDD, DVB-S Technotrend 1.6
    VDR-Client:VDR-1.4.4,Sarge, VIA EP ML-6000EA Mini-ITX Motherboard 677MHz, 512MB RAM, 1050GB HDD, DVB-S Technotrend 1.6; Kernel 2.6.16-ct-1
    NFS-File-Server; openSuse10.2: Atholon 3400+, 1GB RAM, 4.0TB HD, :P
    Server: SuSE9.3, Kernel 2.6.11.4-21-7

  • wieso ist das ein Bug? Das soll es doch auch :)


    PS: Einfach mal irgendwo eine Struktur anlegen:
    ./foo
    ./foo/bär
    ./foo/bär/blubb
    ./foo/bär/blabbel


    und dann beide Scripts in ./foo testen, dann wird sicher schnell klar, was ich meine ;)

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

    Einmal editiert, zuletzt von zirias ()

  • Zitat

    Original: von mir
    Da schein auch noch ein kleiner Bug versteckt zu sein.


    Na von der Aussage heute morgen distanzier ich mich doch ganz schnell.
    Da war ich wohl noch nicht ganz wach und zu doof zum testen.


    zirias, jep, du hast Recht es tut doch Fehlerfrei ;)


    Gruß,
    Hego

    VDR-Sever: ct-VDR 6 und vdrdevel 1.7.0, AthlonXP1600+,256MB RAM, 1.7TB HDD, DVB-S Technotrend 1.6
    VDR-Client:VDR-1.4.4,Sarge, VIA EP ML-6000EA Mini-ITX Motherboard 677MHz, 512MB RAM, 1050GB HDD, DVB-S Technotrend 1.6; Kernel 2.6.16-ct-1
    NFS-File-Server; openSuse10.2: Atholon 3400+, 1GB RAM, 4.0TB HD, :P
    Server: SuSE9.3, Kernel 2.6.11.4-21-7

  • Hi, wenn ich das Perl script starte kommen bei mir fehler.

    Code
    nosp.pl
    /usr/local/bin/nosp.pl: line 1: AGE:: command not found
    /usr/local/bin/nosp.pl: line 29: use: command not found
    /usr/local/bin/nosp.pl: line 30: use: command not found
    /usr/local/bin/nosp.pl: line 32: syntax error near unexpected token `('
    /usr/local/bin/nosp.pl: line 32: `use File::Find ();'


    Kann sich die jemand erklären?


    Kann gar nichts an perl.


    mfg eimer


    Problem gelöst: Copy Paste über Putty kein gute wahl lieber über Freigabe in Unix Code Editor laden und dort bearbeiten.


    Klappt alles super und tut seinen Dienst.

    mfg eimer


    VDR1: Debian 2.6.24.2 e-Tobi | AMD Mobile 3000+ (~50W Idle) | K8MM3-V | 256MB | 500GB Samsung | TT2300 DVB-C | KabelBW | lautlos | FUSI Scenic 600

    Einmal editiert, zuletzt von eimer ()

Jetzt mitmachen!

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