BASH: auf alle Dateien im Dir ein Befehl ausführen

  • Hi,


    es müsste doch per BASH-Scripting direkt möglich sein, auf jede Datei im Verzeichnis einen Befehl auszuführen. Nur wie? dir -1 liefert mir alle Dateien - pro Zeile eine Datei, wie aber gebe ich jede einzelne Zeile des dir-Befehls als Übergabeparameter an einen Befehl?


    Joe

  • Code
    for i in `dir -1`; do BEFEHL $i; done
    Code
    for i in *; do BEFEHL $i; done
    Code
    BEFEHL *
    Code
    find . -type f -exec BEFEHL ;
    Code
    dir -1| BEFEHL -

    Alles ungetestet, dürfte aber alles funktionieren, manches hängt aber von dem Befehl ab.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Super. Danke.


    Joe

  • Ich hatte da schon mal Probleme mit Dateinamen, die ein Leerzeichen enthielten. Hatte da noch keine Lösung gefunden. Also so als Hinweis: Teste es doch mal bitte, ob Deine Variante auch mit Leerzeichen in Dateinamen funktioniert. Würde mich dann über eine kleine Rückmeldung freuen.




    Besten Dank. DMH

    Hardware: AMD Duron 900 MHz, 256 MB Ram, 1 x 400 GB und 2 x 200 GB Maxtor, 1 x 500 GB USB 2.0, Nec DVD-RW ND-3500AG, 1 x TT 1.6 FF DVB-S, 1 x Twinhan Budget DVB-T
    Software: VDR 1.4.1, BigPatch, DMH-DVD-Archive-Patch, Kernel 2.6.12
    ---
    "Hörma, wie heißt nomma dat Instrument mit den 3 Knöppen oben drauf...? - Ja richtig, Flöte!"

  • Zitat

    Original von dmh
    Ich hatte da schon mal Probleme mit Dateinamen, die ein Leerzeichen enthielten. Hatte da noch keine Lösung gefunden. Also so als Hinweis: Teste es doch mal bitte, ob Deine Variante auch mit Leerzeichen in Dateinamen funktioniert. Würde mich dann über eine kleine Rückmeldung freuen.


    Dem kannst Du abhelfen:

    Code
    OLDIFS=$IFS
    IFS="
    "
    ...normaler Skript-Code...
    IFS=$OLDIFS

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Hi dmh,


    aus eigener Erfahrung kann ich Dir sagen, dass bei Leerzeichen im Dateinamen nur die Version von amair funktioniert (oder die 4. Variante von knebb, wenn man die geschweiften Klammern richtig setzt). Alle anderen Vorschläge von knebb funktionieren bei Leerzeichen nicht.


    Gruß,
    Armin

    VDR
    ASUS A7N8X-X, AMD 2600+, 2 GB, 320 GB HD, Hauppauge DVB-S 1.3, Hauppauge Nova-S-Plus, Funktastatur
    Debian 4.0/Etch-Kernel 2.6.18-5-486
    c't-VDR 6.1 mit e-tobi 1.6.0 (neu gepatched ohne sortrecordings), acpi, vdradmin-am, burn, osdteletext, ffnetdev, audiorecorder, infosatepg, ...
    Client
    dbox2 (Sagem 2xI_C) mit Neutrino-Derivat

  • Zitat

    Original von ark
    Alle anderen Vorschläge von knebb funktionieren bei Leerzeichen nicht.


    Mit der IFS-Variante schon.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Klar - mit Nachbessern geht's dann auch.


    Armin

    VDR
    ASUS A7N8X-X, AMD 2600+, 2 GB, 320 GB HD, Hauppauge DVB-S 1.3, Hauppauge Nova-S-Plus, Funktastatur
    Debian 4.0/Etch-Kernel 2.6.18-5-486
    c't-VDR 6.1 mit e-tobi 1.6.0 (neu gepatched ohne sortrecordings), acpi, vdradmin-am, burn, osdteletext, ffnetdev, audiorecorder, infosatepg, ...
    Client
    dbox2 (Sagem 2xI_C) mit Neutrino-Derivat

  • Und rekursiv in Unterverzeichnisse abtauchen geht nur mit find, oder?

    This is a .44 Magnum, the most powerful handgun in the world. It can take your head clean off. You've got to ask yourself one question, Do I feel lucky?
    easyvdr 0.9a2 - TT-DVB-S2-6400 - ASUS AT3IONT-I deluxe - Atom 330 - 1,5TB WD EADS - Denon 1910 - Toshiba 42X3030D - Harmony 700

  • Sagen wir ls (und dir ist m.W. ein alias von ls) kann entweder das aktuelle oder rekursiv alle. Bei find lässt es sich mit depth begrenzen. (Aber wenns ans filtern geht landet man eh irgendwann bei find ;) )

  • ich würds so machen.


    Code
    find . -type f -exec echo blabla: {} \;


    geht auch rekursiv.


    just my 0.02 cents..
    Roland

    Software: VDR 1.4.3, mp3, osdpip, streamdev-server, femon, wapd, X11, Wireless Keyboard Kernel: 2.6.18
    Hardware: 1x DVB-S v 1.3, 1x Skystar 2, Celeron@2GHz, 256 MB RAM, 4 HDs Raid1/5, Total: 600 GB, Asus P4S533 cmi8738 & LAN on board 6 PCI
    40" Sammelbestellungs-LCD an ATI Radeon 9550 DVI-Out + tvtime, 70 cm TV an J2-RGB-Out
    Organisator der ersten und zweiten VDR-Sanitizer Sammelbestellung.
    In progress: POV-ION 330 - MediaPointer MP-S2 - vdr 1.7.9 - vdr-xine(vdpau)

    Einmal editiert, zuletzt von pram ()

  • Hi all,


    wie müßte denn das Skript aussehen, wenn ich alle meine grip-ten wav-Dateien in ogg wandeln möchte?


    Der einzel-Befehl pro Verzeichnis wäre:
    oggenc -q 5 *.wav


    Dann müßte ich nur noch den Verzeichnisbaum kopieren und alle wav löschen (es gibt dann ein /wav Verzeichnis und ein daraus abgeleitetes /ogg Verzeichnis)


    meine nicht funktionierende Zeile war:
    find . -type d -L -exec{oggenc -q 5 *.wav}+


    Gruß
    Klemmerle

    Und bist Du nicht willig, so brauch ich Geduld!
    System: TV Philips 4k, + CEC-Remote, Octopus Net

    Odroid N2+ mit VDRSternELEC

  • Hi,


    das sucht alle wav und wandelt die:

    Code
    find . -name "*.wav" -exec oggenc -q 5 "{}" \;

    VDR1: Gigabyte GA-M720-US3 (nVidia Corporation MCP78S [GeForce 8200]), Athlon II X2 240, 2GB RAM, Intel 82574L Gigabit, Debian Squeeze, Kernel 2.6.38.3 mit linux-media.tar.bz2 vom 20.04. 10:04, dvbhddevice fb6b1beedb72, VDR-1.7.22 (extension-Patch, 15 Plugins), epgsearch, extrecmenu, ...
    VDR2: Debian Etch, 2.6.21.3, K6-2 400, 192MB, NFS-Root, 466GiB über NFS, 1xNexus 2.1, 1xNova S, VDR-1.4.7
    Server: Debian Squeeze, 2.6.35.7, AMD X2 240e, 4GB, System: Raid1 2x500GB, Aufnahmen: Raid5 4TB + 1x 500GB, 1000MBit LAN
    Episodenlisten für epgsearch, VDRSeriesTimer

  • Hmm, wíe stelle ich es an, wenn ich bei jeder Datei vom Benutzer eine Eingabe benötige. Wenn ich es mit "read ZEILE" mache kommt die while-Schleife durcheinander, da ich damit das read FILE "übergehe"...

  • Zitat

    Original von mrjoe
    Hmm, wíe stelle ich es an, wenn ich bei jeder Datei vom Benutzer eine Eingabe benötige. Wenn ich es mit "read ZEILE" mache kommt die while-Schleife durcheinander, da ich damit das read FILE "übergehe"...


    Sofern keine weitere pipe zwischen Programm und Benutzerkonsole hängt:


    Code
    read ZEILE <&1

Jetzt mitmachen!

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