Jak w skrypcie bash mogę powiedzieć „dla wszystkich plików typu .png lub .PNG”?
Próbuję :
for i in (`ls *.PNG` && `ls *.png`)
ale pojawia się błąd składniowy.
źródło
Jak w skrypcie bash mogę powiedzieć „dla wszystkich plików typu .png lub .PNG”?
Próbuję :
for i in (`ls *.PNG` && `ls *.png`)
ale pojawia się błąd składniowy.
Jeśli chcesz wszystkie możliwe kombinacje, użyj:
for i in *.[Pp][Nn][Gg]; do
lub
shopt -s nocaseglob
for i in *.png; do
chociaż spowoduje to, że wszystkie globusy powłoki skryptu (tzn. dopasowania plików symboli wieloznacznych) nie będą rozróżniać wielkości liter do momentu uruchomienia shopt -u nocaseglob
.
Jeśli naprawdę chcesz tylko .PNG i .png (a nie na przykład .PnG lub .pnG), użyj albo
shopt -s nullglob
for i in *.png *.PNG; do
lub
for i in *.png *.PNG; do
[[ -e "$i" ]] || continue
... powodem sprawdzenia nullglob lub istnienia jest to, że jeśli masz tylko małe lub tylko wielkie litery rozszerzenia, spowoduje to umieszczenie niedopasowanego wzorca na liście plików, co prowadzi do błędu w treści pętli. Podobnie jak w przypadku nocaseglob, możesz chcieć później wyłączyć opcję powłoki nullglob (chociaż z mojego doświadczenia włączenie nullglob jest często dobre, szczególnie w skrypcie). Właściwie uważam, że dobrym pomysłem jest użycie sprawdzania nocaseglob lub sprawdzania istnienia dla wszystkich takich dopasowań plików, na wypadek, gdyby nie było żadnych dopasowań.
for i in *.{png,PNG}
Możesz także wypróbować jedną linijkę, taką jak
lub
Edytuj
Zobacz także komentarz @ Yab poniżej dotyczący rekurencji.
źródło
find -maxdepth 1 -iname "*.png"
ls
jest tu prawie bezużyteczne, ale dla przypomnienia tutaj składnia jest bliżej twojej próby:Uwagi:
źródło