Problem mit Bash

Es gibt 7 Antworten in diesem Thema, welches 1.448 mal aufgerufen wurde. Der letzte Beitrag () ist von gierig.

  • Folgende Bash Zeile listet unter macOS alle Textdateien in einem Verzeichnis, sowie aller Unterverzeichnisse auf:


    Code
    find . -type f -name "*.txt" | while read -r file; do echo "$file"; done

    Mit einem Synology NAS (DSM 7.2) funktioniert das nicht, obwohl DSM auch Bash benutzt. Es wird aber auch keine Fehlermeldung angezeigt, der Code wird ohne Ausgabe ausgeführt auch wenn sich Textdateien im Verzeichnis befinden.


    Hat jemand eine Ahnung was hier schief läuft?


    Anmerkung: ist es sinnvoll in diesem Unterforum eine Controller und Gateway Auswahl treffen zu müssen, auch wenn diese mit dem Thema überhaupt nichts zu tun haben?

    ╭───────────┬────────────────────────────────╮

    ·Network·1··DSL•Cable•LTE·─►·UXG•CK2•UNVR+·

    ├───────────┼────────────────────────────────┤

    ·Network·2··Fibre·────────────────►·UDM·SE·

    ╰───────────┴────────────────────────────────╯

  • $bash --version ?

    ⢀⣴⠾⠻⢶⣦⠀ Debian - The universal operating system user
    ⣾⠁⢠⠒⠀⣿⡁ https://www.debian.org
    ⢿⡄⠘⠷⠚⠋⠀
    ⠈⠳⣄⠀

    :right_arrow: Dumme Gedanken hat jeder, nur der Weise verschweigt sie. (Wilhelm Busch) :left_arrow:

  • Folgende Bash Zeile listet unter macOS alle Textdateien in einem Verzeichnis, sowie aller Unterverzeichnisse auf:

    Code
    find . -type f -name "*.txt" | while read -r file; do echo "$file"; done

    Mit einem Synology NAS (DSM 7.2) funktioniert das nicht, obwohl DSM auch Bash benutzt. Es wird aber auch keine Fehlermeldung angezeigt, der Code wird ohne Ausgabe ausgeführt auch wenn sich Textdateien im Verzeichnis befinden.


    Hat jemand eine Ahnung was hier schief läuft?

    Warum so kompliziert?

    Code
    find . -type f -name "*.txt"

    reicht doch völlig.

    Anmerkung: ist es sinnvoll in diesem Unterforum eine Controller und Gateway Auswahl treffen zu müssen, auch wenn diese mit dem Thema überhaupt nichts zu tun haben?

    Guter Hinweis: nehme ich auf. :smiling_face:

    $bash --version ?

    Auf meiner DS (DSM 7.2):

    Code
    $ bash --version
    GNU bash, version 4.4.23(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2016 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    
    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
  • Die while Schleife habe ich vergessen zu entfernen, da das Skript noch mehr tut (es fügt eine Zeile zu der Datei hinzu). Ich wollte jetzt nur mal testen, warum keine Datei gefunden wird.

    Auf meiner Synology ist auch Bash 4.4 installiert. macOS benutzt eine ältere Version 3.2.

    ╭───────────┬────────────────────────────────╮

    ·Network·1··DSL•Cable•LTE·─►·UXG•CK2•UNVR+·

    ├───────────┼────────────────────────────────┤

    ·Network·2··Fibre·────────────────►·UDM·SE·

    ╰───────────┴────────────────────────────────╯

  • Aktuell ist jedenfalls 5.x

    ⢀⣴⠾⠻⢶⣦⠀ Debian - The universal operating system user
    ⣾⠁⢠⠒⠀⣿⡁ https://www.debian.org
    ⢿⡄⠘⠷⠚⠋⠀
    ⠈⠳⣄⠀

    :right_arrow: Dumme Gedanken hat jeder, nur der Weise verschweigt sie. (Wilhelm Busch) :left_arrow:

  • Mit einem Synology NAS (DSM 7.2) funktioniert das nicht, obwohl DSM auch Bash benutzt. Es wird aber auch keine Fehlermeldung angezeigt, der Code wird ohne Ausgabe ausgeführt auch wenn sich Textdateien im Verzeichnis befinden.


    Nur damit es gesagt wurde: Default Shell ist seit Catalina die Z-Shell l(zsh).

    Aber das spielt keine große Rolle, weil du ja explizit Bash sagst und das File Globbing das du „find“ vorsetzt eh das gleiche ist.

    Sollte das find auf der Synology nicht kastriert sein würde ich auch das gleiche Ergebnis erwarten.


    Bleiben also die Dateien selber. Da du mit "-type f" explizit reguläre Dateien suchst: Bist du Dir sicher,

    dass es sich bei den Files auch um "richtige" Files handelt? Es könnten auch Symlinks sein, die

    von "-type f" ausgeschlossen sind. "-type f,l" würde Symlinks mit einschließen.


    ls -l *.txt sollte dann Aufschluss geben (und auch funktionieren).

  • Nur damit es gesagt wurde: Default Shell ist seit Catalina die Z-Shell l(zsh).

    Ja, deshalb steht an erster Zeile immer ein #!/bin/bash in meinen Skripts (bin mit Bash besser vertraut).

    Bleiben also die Dateien selber. Da du mit "-type f" explizit reguläre Dateien suchst: Bist du Dir sicher,

    dass es sich bei den Files auch um "richtige" Files handelt? Es könnten auch Symlinks sein, die

    von "-type f" ausgeschlossen sind. "-type f,l" würde Symlinks mit einschließen.

    Das war mein Fehler: auf der NAS handelt es sich um .srt Dateien (sind eigentlich Text Dateien aber mit anderem Suffix). Dummer Fehler von mir. Vielen Dank für die Hilfe.

    ╭───────────┬────────────────────────────────╮

    ·Network·1··DSL•Cable•LTE·─►·UXG•CK2•UNVR+·

    ├───────────┼────────────────────────────────┤

    ·Network·2··Fibre·────────────────►·UDM·SE·

    ╰───────────┴────────────────────────────────╯