Linux Befehl:



  • Hallo Forum,

    ich möchte alle doc und txt Dateien in eine Datei schreiben. Außerdem möchte ich vor jeder Datei eine Newline und den Namen schreiben.

    So weit bin ich schon:
    find -name *.txt -exec cat {} \; > all.txt

    Wenn ichs so mache:
    find -name *.txt -exec echo {} \; cat {} \; > all.txt

    geht es nicht. Was nimmt man da?
    Wie verwendet man hier RegExpressions? (Notfalls kopiere ich nachher beide Dateien zusammen)



  • Hat sich erledigt. Anstelle des einzelnen Kommandos habe ich ein Script ausführen lassen:
    find -name *.txt -exec sh myscript {} \; > all.txt

    #!/bin/sh
    echo \# $1
    cat "$1 $2 $3 $4 $5 $6 $7 $8 $9"
    echo
    


  • Du musst verhindern, dass die Shell das * expandiert

    find -name '*.txt' -exec cat \{} \; > datei



  • Ne, eigentlich wollte ich kein Script schreiben. Der Find Befehl sollte auf der Bash für jede gefundene Datei zwei Befehle ausführen ("echo \n {} \n" und "cat {}"). Das geht scheinbar nicht, weil der Find Befehl nur alles bis zum ersten Semikolon ausführt. (&& und || gehen auch nicht, selbst wenn man sie maskiert). Statt der 2 Befehle habe ich dann ein Skript geschrieben...



  • Ach so! Hab Dich falsch verstanden. Du meinst das das * erst gar nicht den Find Befehl erreicht. Komischerweise funktioniert es auch so bei meinem Cygwin Linux.



  • Das funktioniert nur dann zufällig, wenn es im aktuellen Verzeichnis keine Unterverzeichnisse, in denen *.txt-Dateien liegen, gibt. BTW ich kenn Cygwin, aber von Cygwin Linux hab ich noch nix gehört.


Anmelden zum Antworten