Typowym sposobem robienia rzeczy z kilkoma plikami jest - i nie uderzaj mnie za to:
for f in $(ls); do …
Teraz, aby zabezpieczyć się przed plikami ze spacjami lub innymi dziwnymi postaciami, naiwnym sposobem byłoby zrobienie:
find . -type f -print0 | while IFS= read -r -d '' file; …
Tutaj -d ''skrótem jest ustawienie ASCII NUL jak w -d $'\0'.
Ale dlaczego tak jest? Dlaczego są ''i $'\0'takie same? Czy to z powodu korzeni C Bash z pustym łańcuchem zawsze kończącym się na zero?
for f in *zamiast parsowania ls.
for i in $(ls)jest strasznie głupi - prawie się wstydzę, że użyłem go tutaj jako złego przykładu.
find … -execzamiast zapętlania plików, co działa w większości przypadków, w których zamiast tego użyłbyś takiej pętli for. Tutaj finddba o wszystko dla Ciebie.