Wie kann ich in einem Bash-Skript für alle Dateien des Typs .png oder .PNG sagen?
Ich versuche :
for i in (`ls *.PNG` && `ls *.png`)
aber immer einen Syntaxfehler.
quelle
Wie kann ich in einem Bash-Skript für alle Dateien des Typs .png oder .PNG sagen?
Ich versuche :
for i in (`ls *.PNG` && `ls *.png`)
aber immer einen Syntaxfehler.
Wenn Sie alle möglichen Kombinationen wünschen, verwenden Sie:
for i in *.[Pp][Nn][Gg]; do
oder
shopt -s nocaseglob
for i in *.png; do
Dabei wird die Groß- und Kleinschreibung aller Shell-Globs Ihres Skripts (z. B. Übereinstimmungen mit Platzhaltern) nicht beachtet, bis Sie ausgeführt werden shopt -u nocaseglob
.
Wenn Sie wirklich nur PNG und PNG (und nicht z. B. PNG oder PNG) möchten, verwenden Sie entweder
shopt -s nullglob
for i in *.png *.PNG; do
oder
for i in *.png *.PNG; do
[[ -e "$i" ]] || continue
... Der Grund für die Nullglob- oder Existenzprüfung ist, dass, wenn Sie nur Klein- oder Großbuchstabenerweiterungen haben, das nicht übereinstimmende Muster in die Liste der Dateien aufgenommen wird, was zu einem Fehler im Hauptteil der Schleife führt. Wie bei nocaseglob möchten Sie möglicherweise die Nullglob-Shell-Option nachträglich deaktivieren (obwohl nach meiner Erfahrung das Aktivieren von Nullglob häufig gut ist, insbesondere in einem Skript). Eigentlich halte ich es eher für eine gute Idee, entweder den nocaseglob oder die Existenzprüfung für alle Datei-Übereinstimmungen wie diese zu verwenden, nur für den Fall, dass es keine Übereinstimmungen gibt.
for i in *.{png,PNG}
Sie könnten auch einen Einzeiler wie versuchen
oder
Bearbeiten
Siehe auch @ Yabs Kommentar zur Rekursion.
quelle
find -maxdepth 1 -iname "*.png"
ls
ist hier fast nutzlos, aber für den Datensatz hier ist eine Syntax näher zu Ihrem Versuch:Anmerkungen:
quelle