Unix 새 줄에서 Windows 새 줄로(Windows의 경우
Windows에서 디렉터리를 반복하고 Unix 파일을 Windows 파일로 변환할 수 있는 방법(예: PowerShell 또는 도구)이 있습니까?
PowerShell에서 적어도 유닉스 파일을 감지하는 방법이 있다면 더할 나위 없이 기쁠 것입니다.
단일 파일에 대해 이 작업을 수행하는 것은 쉽지만, 좀 더 확장 가능한 작업(따라서 PowerShellish 솔루션으로 기울고 있음)을 추구하고 있습니다.
관심이 있다면 여기 순수한 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\n을 추가하기 때문입니다.그렇기 때문에 항상 파일 끝에 줄이 끝나는 것입니다.
또한 위의 코드는 필요한 파일만 수정할 수 있도록 작성하였습니다.신경 쓰지 않으면 제거할 수 있습니다.if
진술.파일만 ForEach-Object(각 객체에 대해)그 외에는 해당 파이프라인을 시작할 때 원하는 필터링을 수행할 수 있습니다.
Cygwin에는 dos2unix와 unix2dos가 있습니다.
이것은 저에게 효과가 있는 것 같습니다.
Get-Content Unix.txt | Out-File Dos.txt
Vim을 다운로드하고 파일을 열고 문제를 해결합니다.
:se fileformat=dos|up
여러 파일에 대한 배치(C:\tmp의 모든 *.txt 파일 - 재귀):
:args C:\tmp\**\*.txt
:argdo se fileformat=dos|up
Visual Studio를 사용할 수 있습니다.메뉴 파일 → 고급 저장 옵션...
Windows 텍스트로 변환하는 작업은 다음과 같이 간단합니다.
(Get-Content file) | Set-Content file
다음을 사용합니다(뒤에 부정적인 내용이 있음). 없이.-nonewline
set-content는 맨 아래에 추가 'r'n'을 배치합니다.괄호를 사용하여 동일한 파일을 수정할 수 있습니다.실수로 동일한 파일을 두 번 실행해도 안전합니다.
function unix2dos ($infile, $outfile) {
(Get-Content -raw $infile) -replace "(?<!`r)`n","`r`n" |
Set-Content -nonewline $outfile
}
그 반대는 다음과 같습니다. Windows에서 UNIX로 텍스트:
function dos2unix ($infile, $outfile) {
(Get-Content -raw $infile) -replace "`r`n","`n" |
Set-Content -nonewline $outfile
}
메모리에 들어가지 않는 대용량 파일에 사용할 수 있는 다른 버전이 있습니다.하지만 출력 파일은 달라야 합니다.
Function Dos2Unix ($infile, $outfile) {
Get-Content $infile -ReadCount 1000 | % { $_ -replace '$',"`n" } |
Set-Content -NoNewline $outfile
}
예(입력 파일과 출력 파일이 같을 수 있음):
dos2unix dos.txt unix.txt
unix2dos unix.txt dos.txt
unix2dos file.txt file.txt
Emacs를 가지고 있다면, 당신은 그것을 확인할 수 있습니다.esc-x hexl-mode
메모장에 Unix 텍스트가 올바르게 표시되지 않습니다. 모든 텍스트가 동일한 줄에 표시됩니다.다음에 대한 경로를 지정해야 합니다.set-content
,왜냐면-replace
삭제합니다.pspath
소유물.
Cygwin이 당신을 위한 것이 아니라면, 당신이 검색하면 윈도우 아래에 unix2dos를 위한 수많은 독립 실행형 실행 파일이 있습니다.여기에서 유사한(변환의 반대 방향) 질문을 참조하십시오.
이전 답변에 제시된 코드를 50KB 이상 크기의 파일이 많은 10,000개의 루프에서 테스트한 결과:
결론적으로 PowerShell 코드는 대용량 파일과 대용량 파일에 매우 비효율적이고 느리며 사용할 수 없습니다.또한 BOM 바이트도 보존하지 않습니다.unix2dos 7.2.3이 가장 빠르고 실용적인 솔루션이라는 것을 알게 되었습니다.
제게 도움이 됩니다.
Get-ChildItem -Recurse -File | % { $tmp = Get-Content $_; $tmp | Out-File "$_" -Encoding UTF8 }
js2010의 답변을 바탕으로 다음 스크립트를 만들었습니다.
$excludeFolders = "node_modules|dist|.vs";
$excludeFiles = ".*\.map.*|.*\.zip|.*\.png|.*\.ps1"
Function Dos2Unix {
[CmdletBinding()]
Param([Parameter(ValueFromPipeline)] $fileName)
Write-Host -Nonewline "."
$fileContents = Get-Content -raw $fileName
$containsCrLf = $fileContents | %{$_ -match "\r\n"}
If($containsCrLf -contains $true)
{
Write-Host "`r`nCleaing file: $fileName"
Set-Content -Nonewline -Encoding utf8 $fileName ($fileContents -replace "`r`n","`n")
}
}
Get-Childitem -File "." -Recurse |
Where-Object {$_.PSParentPath -notmatch $excludeFolders} |
Where-Object {$_.PSPath -notmatch $excludeFiles} |
foreach { $_.PSPath | Dos2Unix }
워드패드에서 Unix 줄 끝이 있는 파일을 열고 저장하면 모든 줄 끝이 DOS로 다시 작성됩니다.많은 수의 파일에는 다소 번거롭지만, 가끔 몇 개의 파일에도 충분히 잘 작동합니다.
언급URL : https://stackoverflow.com/questions/724083/unix-newlines-to-windows-newlines-on-windows
'programing' 카테고리의 다른 글
NumberPicker에서 소프트 키보드 사용 (0) | 2023.08.04 |
---|---|
포지셔닝포지셔닝화면 중앙의 요소 (0) | 2023.08.04 |
JavaScript에서 날짜를 MM/dd/yyyy로 형식 지정 (0) | 2023.08.04 |
레이아웃으로 하나의 뷰를 부풀리는 방법 (0) | 2023.08.04 |
PL/SQL에 대한 코드 적용 범위 (0) | 2023.08.04 |