
Данный:
- большое дерево каталогов, содержащее смесь:
- файлы с окончанием строки LF
- файлы с окончаниями строк CRLF
- файлы со странной смесью окончаний строк LF и CRLF (из-за ошибки)
- двоичные файлы
- другие файлы, которые я не хочу трогать, даже если они сломаны
- пути, которые могут содержать пробелы
Моей целью было оставить файлы только LF и только CRLF в покое и преобразовать гибридные файлы в файлы только CRLF, оставив при этом последние две группы в покое.
Это заклинание работает:
find . (some conditions to exclude stuff I don't want to mess with) |
xargs -d '\n' unix2dos -ic | cut -c 3- |
xargs -d '\n' dos2unix -ic | cut -c 3- |
xargs -d '\n' unix2dos
Но теперь мне интересно, есть ли лучший / более эффективный способ сделать это. (Используя только стандартные инструменты оболочки, а не Perl/Python и т. д.)
FWIW, первый unix2dos -ic
— это фильтрация начального списка только для тех файлов, которые содержат CRLF, затем dos2unix -ic
подфильтрация для тех, которые также содержат LF, и последний фактически выполняет преобразование. Вызовы cut
— это обрезка двух начальных пробелов, которые сбивают с толку xargs
, а также -d
решение проблем с пробелами в именах файлов, поскольку вывод не заключен в кавычки.