Распространенный способ сделать что-то с парой файлов - и не бейте меня за это:
for f in $(ls); do …
Теперь, чтобы обезопасить себя от файлов с пробелами или другими странными символами, наивным способом было бы сделать:
find . -type f -print0 | while IFS= read -r -d '' file; …
Здесь -d ''кратко для установки ASCII NUL, как в -d $'\0'.
Но почему это так? Почему ''и так $'\0'же? Это из-за того, что C-корни Bash с пустой строкой всегда заканчиваются нулем?
for f in *вместо разбора ls.
for i in $(ls)это ужасно глупо - мне почти стыдно, что я использовал это как плохой пример.
find … -execвместо циклического обхода файлов, что работает в большинстве случаев, когда вместо этого вы используете такой цикл for. Здесь findпозаботится обо всем для вас.