Bash test auf dateiendung

Hallo, das Subject ist vielleicht etwas unglücklich. Aber ich habe im Moment keine bessere Idee. Ich möchte gern ein bestimmtes Verzeichnis auf das Vorhandensein nur von pdf-Dateien prüfen. Die anderen Dateien interessieren mich nicht. Grund dafür ist, dass ich diese Dateien mit einer for...done-Schleife weiterverarbeiten möchte und diese Schleife bei _nicht passender_ Dateiendung genau einmal mit "*" als Ergebnis durchläuft. "*" muss ich aber verhindern. Dafür hatte ich folgenden Code angedacht: #!/bin/bash inputdir="/mnt/faxe/" faxfiles=$inputdir"*\.pdf" if [ -f $faxfiles ]; then echo "Jawoll" fi Das funktioniert aber nicht sicher: Ist _keine_ pdf-Datei vorhanden, kommt keine Meldung, wie gewünscht. Ist _eine_ pdf-Datei vorhanden, kommt eine Meldung, wie gewünscht. Sind _mehrere_ pdf-Dateien vorhanden, enthält "*\.pdf" die Liste der pdf-Dateien und die Abfrage meckert herum. Ich habe schon eine ganze Weile im www gesucht. Aber ich kann nichts finden, was möglicher Weise auch daran liegt, dass ich nicht die richtigen Suchbegriffe habe. *Vermutlich ist es ganz einfach. Ich stehe aber auf dem Schlauch und brauchte mal jemand, der mich runterschubst.* Danke und schönes Restwochenende Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

On Sun, 11 Oct 2015 15:39, Alex Winzer <alex.e-mail@...> wrote:
*Grinse-Katze* Der faule Weg: Benutze "ls" anstelle von "test". Beispiel: [code] #!/bin/bash inputdir="/mnt/faxe" faxendung=".pdf" if /usr/bin/ls $inputdir/*$faxendung &>/dev/null then echo "Jawoll" else echo "Nö, nix da" fi [/code] Anmerkung: Das Konstrukt "&>$datei" leitet stderr UND stdout in $datei um. Also das selbe wie ">$datei 2>&1". Der Befehl "ls" bendet mit code 0(null) falls eine oder mehere Dateien gefunden werden, "if" interpretiert das als "true" Schönen Sonntag noch - Yamaban.

Alex Winzer schrieb:
Hi, falls Du die Dateinamen als Liste weiterverarbeiten willst: #!/bin/bash inputdir="/mnt/faxe/" faxfiles=$(find "$inputdir" -name "*.pdf" -type f -print) if [ "X$faxfiles" != "X" ]; then ## wenn "X$faxfiles" = "X" ist, ist $faxfiles leer d.h: ## find hat nix gefunden. echo "Jawoll" fi Schau Dir die manpage von find und xargs an, da gibts gute Tips zur Weiterverarbeitung. -- Gruss Bernd -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo, Am Sun, 11 Oct 2015, Alex Winzer schrieb:
Du suchst shopt -s nullglob shopt -s failglob oder mach's so: ==== #!/bin/bash inputdir="/mnt/faxe/" faxfiles="${inputdir}"/'*.pdf' for f in $faxfiles; do echo $f; done ==== -- Dinner not ready...(A)bort (R)etry (P)izza -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

On Sun, 11 Oct 2015 15:39, Alex Winzer <alex.e-mail@...> wrote:
*Grinse-Katze* Der faule Weg: Benutze "ls" anstelle von "test". Beispiel: [code] #!/bin/bash inputdir="/mnt/faxe" faxendung=".pdf" if /usr/bin/ls $inputdir/*$faxendung &>/dev/null then echo "Jawoll" else echo "Nö, nix da" fi [/code] Anmerkung: Das Konstrukt "&>$datei" leitet stderr UND stdout in $datei um. Also das selbe wie ">$datei 2>&1". Der Befehl "ls" bendet mit code 0(null) falls eine oder mehere Dateien gefunden werden, "if" interpretiert das als "true" Schönen Sonntag noch - Yamaban.

Alex Winzer schrieb:
Hi, falls Du die Dateinamen als Liste weiterverarbeiten willst: #!/bin/bash inputdir="/mnt/faxe/" faxfiles=$(find "$inputdir" -name "*.pdf" -type f -print) if [ "X$faxfiles" != "X" ]; then ## wenn "X$faxfiles" = "X" ist, ist $faxfiles leer d.h: ## find hat nix gefunden. echo "Jawoll" fi Schau Dir die manpage von find und xargs an, da gibts gute Tips zur Weiterverarbeitung. -- Gruss Bernd -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo, Am Sun, 11 Oct 2015, Alex Winzer schrieb:
Du suchst shopt -s nullglob shopt -s failglob oder mach's so: ==== #!/bin/bash inputdir="/mnt/faxe/" faxfiles="${inputdir}"/'*.pdf' for f in $faxfiles; do echo $f; done ==== -- Dinner not ready...(A)bort (R)etry (P)izza -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (4)
-
Alex Winzer
-
Bernd Obermayr
-
David Haller
-
Yamaban