Лучший вариант, который я мог придумать, это:
git grep --cached -Il '' | xargs -L1 bash -c 'if test "$(tail -c 1 "$0")"; then echo "No new line at end of $0"; exit 1; fi'
Используется git grep
, потому что в моем сценарии использования я хочу убедиться, что файлы, переданные в ветку git, заканчиваются символом новой строки.
Если это требуется вне git-репо, вы, конечно, можете просто использовать grep
.
grep -RIl '' . | xargs -L1 bash -c 'if test "$(tail -c 1 "$0")"; then echo "No new line at end of $0"; exit 1; fi'
Почему я использую grep?Поскольку вы можете легко отфильтровать двоичные файлы с помощью -I
.
, тогда обычная вещь xargs / tail, найденная в других ответах, с добавлением к завершится с 1 , если в файле нет перевода строки,Так что это может быть использовано в Githook перед фиксацией или CI.