Вот чистый способ PowerShell, если вы заинтересованы.
Поиск файлов по крайней мере с одним окончанием строки UNIX (PowerShell v1):
dir * -inc *.txt | %{ if (gc $_.FullName -delim "`0" | Select-String "[^`r]`n") {$_} }
Вот как вы можете найти и преобразовать окончания строк UNIX в окончания строк Windows. Важно отметить, что в конец файла будет добавлено дополнительное окончание строки (\ r \ n), если в конце еще нет конца строки. Если вы действительно этого не хотите, я опубликую пример того, как вы можете этого избежать (это немного сложнее).
Get-ChildItem * -Include *.txt | ForEach-Object {
## If contains UNIX line endings, replace with Windows line endings
if (Get-Content $_.FullName -Delimiter "`0" | Select-String "[^`r]`n")
{
$content = Get-Content $_.FullName
$content | Set-Content $_.FullName
}
}
Вышеприведенное работает, потому что PowerShell автоматически разбивает содержимое на \ n (удаляя \ r, если они существуют), а затем добавляет \ r \ n, когда записывает каждую вещь (в данном случае строку) в файл. Вот почему вы всегда заканчиваете строкой, заканчивающейся в конце файла.
Кроме того, я написал приведенный выше код, чтобы он изменял только те файлы, которые ему нужны. Если вас это не волнует, вы можете удалить оператор if. О, убедитесь, что только файлы попадают в ForEach-Object. Кроме этого, вы можете выполнять любую фильтрацию в начале этого конвейера.