Dalam skrip bash, bagaimana saya bisa mengatakan 'untuk semua file bertipe .png atau .PNG'?
Saya mencoba :
for i in (`ls *.PNG` && `ls *.png`)
tetapi mendapatkan kesalahan sintaksis.
sumber
Dalam skrip bash, bagaimana saya bisa mengatakan 'untuk semua file bertipe .png atau .PNG'?
Saya mencoba :
for i in (`ls *.PNG` && `ls *.png`)
tetapi mendapatkan kesalahan sintaksis.
Jika Anda ingin semua kemungkinan kombinasi, gunakan:
for i in *.[Pp][Nn][Gg]; do
atau
shopt -s nocaseglob
for i in *.png; do
meskipun itu akan membuat semua gumpalan shell skrip Anda (yaitu file wildcard cocok) case sensitif sampai Anda menjalankan shopt -u nocaseglob
.
Jika Anda benar-benar hanya ingin .PNG dan .png (dan tidak, misalnya, .PnG atau .pnG), maka gunakan
shopt -s nullglob
for i in *.png *.PNG; do
atau
for i in *.png *.PNG; do
[[ -e "$i" ]] || continue
... alasan untuk nullglob atau pemeriksaan keberadaan adalah bahwa jika Anda hanya memiliki ekstensi huruf kecil atau hanya huruf besar, itu akan menyertakan pola yang tidak cocok dalam daftar file, yang mengarah ke kesalahan dalam tubuh loop. Seperti halnya nocaseglob, Anda mungkin ingin mematikan opsi shell nullglob sesudahnya (walaupun menurut pengalaman saya, nullglob on sering kali baik, terutama dalam skrip). Sebenarnya, saya lebih suka menggunakan nocaseglob atau cek keberadaan untuk semua kecocokan file seperti ini, kalau-kalau tidak ada kecocokan.
for i in *.{png,PNG}
Anda juga dapat mencoba beberapa lapisan seperti
atau
Sunting
Lihat juga komentar @ Yab di bawah tentang rekursi.
sumber
find -maxdepth 1 -iname "*.png"
ls
hampir tidak berguna di sini tetapi untuk catatan di sini ada sintaks yang lebih dekat dengan upaya Anda:Catatan:
sumber