Пробелы в именах файлов



Именование файлов и каталогов, по существу, не регламентируется, за исключением того, что имена ограничены по длине и не должны содержать косой черты или нули. В частности, допускаются пробелы. К сожалению, система UNIX имеет давнюю традицию разделения аргументов командной строки на пробелы, поэтому устаревшее ПО имеет тенденцию давать сбой, когда в именах файлов появляются пробелы.



Пробелы в именах файлов были обнаружены прежде всего в файловых системах, совместно используемых с компьютерами Мас и персональными компьютерами, но теперь они внедрились в культуру UNIX и также встречаются в некоторых стандартных пакетах программного обеспечения. Выхода нет: административные сценарии должны быть готовы обрабатывать пробелы в именах файлов (не говоря уже об апострофах, звездочках и различных других угрожающих пунктуационных метках).



В оболочке и в сценариях можно указывать имена файлов с пробелами, чтобы держать их части вместе. Например, команда

$ less "Му spacey file"

считает файл Му spacey file в качестве единственного аргумента команды less. Также можно избежать отдельных пробелов с помощью обратной косой черты:

$ less Му\ spacey\ file



Функция завершения имени файла большинства оболочек (зачастую привязанная к клавише <Таb>) обычно автоматически добавляет обратную косую черту. Когда вы пишете сценарии, полезным оружием, о котором нужно знать, является опция -print0. В сочетании с параметром xargs -0 она делает комбинацию find /xargs корректной, независимо от пробелов, содержащихся\ в именах файлов. Например, команда

$ find / home-type f -size + 1М -print0 1 xarqs -0 ls -1

выводит на экран длинный список всех файлов в каталоге /home размером более одного мегабайта



@linuxkalii