Đây là cách PowerShell tinh khiết nếu bạn quan tâm.
Tìm file với ít nhất một dòng UNIX kết thúc (PowerShell v1):
dir * -inc *.txt | %{ if (gc $_.FullName -delim "`0" | Select-String "[^`r]`n") {$_} }
Đây là cách bạn tìm và bí mật UNIX kết thúc dòng để kết thúc dòng Windows. Một điều quan trọng cần lưu ý là một dòng kết thúc (\ r \ n) sẽ được thêm vào cuối tệp nếu chưa có dòng nào kết thúc ở cuối. Nếu bạn thực sự không muốn điều đó, tôi sẽ đăng một ví dụ về cách bạn có thể tránh nó (nó phức tạp hơn một chút).
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
}
}
Các công trình trên vì PowerShell sẽ tự động tách các nội dung trên \ n (thả \ r nếu chúng tồn tại) và sau đó thêm \ r \ n khi nó viết mỗi điều (trong trường hợp này một dòng) đến tập tin . Đó là lý do tại sao bạn luôn kết thúc bằng một dòng kết thúc ở cuối tệp.
Ngoài ra, tôi đã viết mã ở trên để nó chỉ sửa đổi các tệp cần thiết. Nếu bạn không quan tâm đến điều đó, bạn có thể loại bỏ câu lệnh if. Oh, hãy chắc chắn rằng chỉ có các tập tin có được đối tượng ForEach. Ngoài ra, bạn có thể thực hiện bất kỳ bộ lọc nào bạn muốn khi bắt đầu kênh đó.
http: // superuser.com/questions/27060/batch-convert-files-for-encoding-hoặc-line-end-under-windows/ –
Đối với những người nghĩ rằng họ cần phải làm điều này vì một repo git hơi say, bạn có thể không. Có thể khắc phục sự cố này với git theo các cách khác, như: http://stackoverflow.com/questions/1510798/trying-to-fix-line-endings-with-git-filter-branch-but-having-no- may mắn/1511273 # 1511273 –