Cara umum untuk melakukan sesuatu dengan beberapa file adalah — dan jangan memukul saya untuk itu:
for f in $(ls); do …
Sekarang, untuk aman terhadap file dengan spasi atau karakter aneh lainnya, cara naif adalah dengan melakukannya:
find . -type f -print0 | while IFS= read -r -d '' file; …
Di sini, -d ''kependekan dari pengaturan NUL ASCII seperti pada -d $'\0'.
Tapi mengapa begitu? Mengapa demikian ''dan $'\0'sama? Apakah itu karena akar C dari Bash dengan string kosong selalu diakhiri null?
for f in *bukan parsing ls.
for i in $(ls)sangat bodoh — saya hampir malu saya menggunakannya sebagai contoh yang buruk di sini.
find … -execalih-alih memutar di sekitar file, yang berfungsi untuk sebagian besar kasus di mana Anda akan menggunakan loop untuk. Di sini, findurus semuanya untuk Anda.