유닉스 줄 끝을 Windows로 변환


38

최근에 Linux에서 Windows로 돌아 왔습니다. CRLF 파일, LF 파일 및 혼합 파일이 있습니다. 모든 Unix 용 파일을 찾아 적절한 CRLF 종료 파일로 변환하는 데 도움이되는 유틸리티가 있습니까?

이 유틸리티는 Linux가 아닌 Windows에서 실행해야합니다. 나는 이미 움직였다. Cygwin 을 피할 수 있다면 오히려 설치하지 않을 것입니다.


1
관련 : 참조 superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... 그에서 언급 된 모든 도구는 당신이 원하는 것을 달성하기 위해 반전 될 수있다
돌팔이 의사 키호테

중복 질문
ukanth 09

Duplicate 질문이라는 솔루션은 모두 Linux 플랫폼에서 실행되거나 반대 변환을 수행합니다. 나는 더 이상 리눅스가 없다. 창문이 있습니다.
Matthew Scouten

1
Cygwin, GnuWin32, UnxUtils 등을 통해 Windows에서 모두 사용할 수 있습니다. 나는 이것을 할 수있는 Powershell 스크립트가 있다고 생각하지만 링크를 제공하기에 충분하지는 않습니다.
quack quixote

1
@quack :이 질문은 구체적으로 사용자가 Windows 유틸리티를 사용하여 Windows에서 작업을 수행 할 무언가를 찾고 있음을 나타냅니다.
Brian Lacy

답변:


34

unix2dosLinux 플랫폼 의 유틸리티를 사용하여 변환 할 수 있습니다 . 있습니다 unix2dos Windows 용 가능한 버전 뿐만 아니라이.

Perl을 설치 한 경우이 라이너를 사용할 수도 있습니다.

perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt

나는 이것과 비슷한 것을했지만 파이썬을 사용했습니다.
Matthew Scouten

2
@ Matthew Scouten : 그래서 ... 당신은 Windows에서 실행되는 유닉스 유틸리티를 발견했습니다! 축하합니다!
quack quixote

8
예, 아니오 나는 나 자신의 폭파 유틸리티를 썼습니다. 나는 처음부터 이것을 할 수 있었지만 30 분을 절약하기를 바랐다. 불행히도 사용 가능한 유틸리티가 마음에 들지 않았습니다. 가장 가까운 디렉토리에서 바이너리 파일이 손상되었습니다.
Matthew Scouten 2009

dos2unix 및 unix2dos로 변환하는 데 문제점이 있습니다. 파일에 CRLF와 LF가 혼합되어 있으면 대체되지 않는 일부 발생이있을 수 있습니다.
pbies

17

쉽고 빠른 방법이 있습니다.

텍스트 파일을 Chrome으로 드래그 앤 드롭 (다른 브라우저에 대해서는 잘 모르겠습니다) 한 다음 잘라내어 원래 파일로 다시 붙여 넣습니다. :)


2
hehe…이 대답은 나를 lol 만들었다
ClintM

모든 브라우저는 IE를 포함하여 유닉스 줄 끝을 읽을 수 있습니다. 그러나 그때조차도 워드 패드 도 그렇게 할 수 있으며 현대 메모장도 마찬가지입니다 . 여기서 중요한 것은 여러 파일을 자동으로 변환하는 방법입니다.
phuclv

10

폴더를 재귀 적으로 살펴보고 파일 필터를 허용하고 "\ r \ n"에 대한 간단한 검색을 허용하고 "\ n"으로 바꾸는 것이 메모장 + + 였습니다.

Notepad ++는 Windows를위한 최고의 무료 오픈 소스 메모장 프로그램 중 하나입니다. 매우 간단하고 강력합니다. 줄 끝 검색 / 바꾸기를 잘 처리했습니다. 계약자는 Linux \ r \ n 줄 끝을 사용하여 리포지토리에있는 .c 및 .h 파일을 검사하지만 대부분의 사람들은 Windows / Eclipse 빌드 도구를 표준화 했으므로 줄 끝이 변환 될 때까지 파일이 빌드되지 않습니다 .


8
리눅스는 \ n, 창문은 \ r \ n입니다.
Matthew Scouten

10
Edit -> EOL Conversion변환 할 파일 수가 적은 경우 메모장 ++에도 간단한 메뉴가 있습니다.
user1071136

8

스위스 파일 나이프를 사용하십시오 .

예를 들어, sfk addcr -dir . -file .txt -norec
LF 엔딩을 현재 디렉토리의 모든 .txt 파일에서 Windows 용 CR / LF로 변경하지만 하위 디렉토리에는 없습니다 (재귀 없음).

그러나이 프로그램은 그 이상을 수행합니다.


나는 -norec재귀가 일어나기를 원하기 때문에 지정 하지는 않지만 그렇게 보이지는 않습니다.
Csaba Toth

6

Cygwin에서는 두 가지 기본 제공 유틸리티를 사용하여 Unix와 "DOS"AKA Windows 파일간에 변환 할 수 있습니다.

DOS CR / LF 형식으로 변환 :

u2d filename

Unix CR 형식으로 다시 변환하십시오.

d2u filename

파일은 같은 이름으로 그대로 남아 있습니다.

즐겨! 약간 뒤틀리게 하다


때때로 호출 dos2unix되거나 unix2dosu2d 또는 d2u로 찾을 수없는 경우가 있습니다. 도 있습니다unix2mac
gtatr

3

이 솔루션을 버릴 것입니다. 힘내는이를 할 것입니다. 그것에 대해이 게시물보기

이론적으로는 전체 트리를 변환하기 위해이 작업을 수행 할 수 있습니다

cd root/of/tree
git init .
git add .
git commit -m "initial commit"
echo "* text eol=crlf" > .gitattributes
git rm --cached -r .
git reset --hard

변경 crlflf당신이 다른 방법으로 이동합니다. 참고 : 아직 완료되지 않았습니다. 계속 읽으십시오.

git status영향을받는 파일을 보려면 입력 하십시오. 다음과 같은 줄을 추가해야 할 수도 있습니다

*.jpg binary
*.png binary
*.gif binary

.gitattributes특정 파일 변환을 피하기 위해. 특정 파일을 텍스트로 명시 적으로 표시 할 수도 있습니다

*.md text
*.css text

그런 다음 편집 후이 두 줄을 반복하십시오. .gitattributes

git rm --cached -r .
git reset --hard

그런 다음 git status다시 사용 하여 변경 될 파일을 확인하십시오. 영향 git status을 받으려는 모든 파일이 다음에 의해 나열되어 있다고 확신하면 커밋

git add .
git commit -m "normalize line endings"

이제 모든 파일을 다시 확인하십시오.

git rm --cached -r .
git reset --hard

이제 원하는 줄 끝이 무엇이든 있어야합니다.

** 참고 : 이미 git을 사용중인 경우 처음 3 개의 명령 git 명령을 건너 뛰십시오. git을 사용하지 않았다면 이제 .gitattributes파일과 .git폴더를 삭제할 수 있습니다 .

** 파일 백업 : 파일을 git rm --cached -r삭제합니다 (이론적으로 이론적으로 git repo (.git 폴더)에 있지만 마지막 명령으로 git reset --hard파일이 복원되는 방식 입니다. 파일이 삭제 된 직후에 파일을 백업하는 것이 가장 좋습니다. 쪽으로.


1

모든 파일에서 끝나는 모든 줄을 변환 할 필요는 없지만 첫 번째 줄에 전체 파일을 묶고 싶지 않은 경우 SciTE 또는 메모장 ++ 와 같은 두 줄 끝을 이해하는 텍스트 편집기를 사용 하십시오.


그것이 리눅스로 전환하는 동안 역 문제가 발생했을 때의 말입니다. 나는 잘못된 줄 결말에 문제가있는 도구를 계속 사용했습니다. 그리고 NOTHING은 혼합 줄 끝을 합리적으로 처리합니다.
Matthew Scouten

@ Matthew 나는 scite 핸들 유닉스 / 윈도우 라인 엔딩을 올바르게 알고 있습니다. 나는 호스트 시스템에서 파일을 편집 할 때 리눅스에서 실행되는 Windows vms에서 그 목적으로 사용합니다.
nelaaro

나는 당신이 추천하는 편집자가 잘 작동 할 것이라고 확신합니다. 그러나 어느 시점에서 텍스트 파일을 다른 도구에 공급해야하지만 해당 도구는 그렇지 않습니다. 이 시점에서 잘 처리하는 텍스트 편집기가 있으면 문제를 숨겨서 악화시킬 수 있습니다. 그리고 나는 여전히 혼합 결말을 잘못 (또는 적어도 기발한) 처리합니다.
Matthew Scouten

1
거짓말 엔딩을 변환하는 notepad ++ 옵션의 경우 +1 보다 구체적으로 수행하는 방법은 다음과 같습니다 ( "방법 2"참조) : staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
wip

메모장 ++은 이미 줄 끝을 변환하는 솔루션을 가지고 있습니다.
phuclv

0

OL 파일을 TEXT 파일로 번역하는 방법은 여러 가지가 있으며 모두가 좋아합니다.

그러나 항상 BINARY 모드에서 Linux에서 Windows로 파일을 전송 한 다음 두 유형을 모두 열고 필요에 따라 두 형식으로 저장할 수있는 편집기를 사용하여 Windows에서 TEXT 파일을 엽니 다.

나는 이것을 위해 Programmers File Editor를 사용했지만 메모장 ++도 그렇게 할 수 있습니다. 워드 패드는 또한 [적어도 LF 종료 파일 을 보는 데] 유용합니다 .

Linux에서 시작되어 Windows의 (사실 표준) 세계에서 읽을 수있는 간단한 텍스트 파일을 생각하고 있습니다. '유닉스 터치 파일'의 의미가 무엇인지 잘 모르겠습니다.


이 방법의 문제점은 한 번에 하나의 파일 만 수행한다는 것입니다.
Matthew Scouten

'unix-touched files'는 LF 전용 및 혼합 CRLF-LF 파일에 대한 나의 말입니다. 유닉스 도구로 파일을 편집 한 후에는 LF 전용 줄로 '감염'되는 경향이 있습니다.
Matthew Scouten

2
내가 실제로 말한 것은 텍스트 파일을보기 위해 올바른 소프트웨어를 선택하면 전혀 변환 할 필요가 없다는 것입니다. BTW, CRLF 종료 파일을 '적절한'것으로 설명하는 작업을 피했습니다. 그것은 전적으로 당신의 관점에 달려 있습니다. 각 방법은 자체 OS에 적합합니다. 파일을 다른 OS로 옮기면 Win / Mac / Linux가 모두 다르다는 것을 알 수 있습니다. 유닉스 / 리눅스 방법이 원래 방법 인 것 같습니다.
pavium

3
당신은 잘못을 의심합니다. ASCII 표준은 원래 텔레타이프 머신 용으로 개발되었으며 CRLF를 의무화했습니다. HTTP, SMTP, FTP, IRC 및 기타 여러 인터넷 프로토콜을 포함한 대부분의 인터넷 프로토콜에는 CRLF 엔딩이 필요합니다 (대부분의 구현에서는 비 호환 Unix 프로그램과의 호환성을 위해 베어 LF를 허용 함). 이 경우 Windows는 표준을 따르고 Unix와 Mac은 표준을 위반합니다.
Matthew Scouten

0

더 많은 옵션을 제공하려면 ( user45832의 핵 답변을 가장 좋아 했지만 ) :

온라인 변환기

GUI FTP 프로그램 이 자동으로 수행 할 것 같습니다.

Batch / DOS one-liner (빈 줄 제거) :

FOR /F "eol= delims= usebackq" %a IN (infile.txt) DO (ECHO %a>> outfile.txt)

파워 쉘 :

gc infile.txt | %{$_.split("`n")} | Out-File outfile.txt

여기 에서 마지막 두 개 얻었다


0

가져 오기 Windows 용 AWK를 .

유닉스 줄 끝을 Windows 줄 끝으로 변환 :

awk 'sub("$", "\r")' unixfile.txt > winfile.txt

Windows 줄 끝을 Unix 줄 끝으로 변환하십시오.

awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt

이전 버전 awk에는 sub기능이 포함되어 있지 않습니다 . 이러한 경우, 동일한 명령을 사용하지만 교체 awkgawknawk.

출처


0

Wikipedia 에는 cmd에 솔루션이 있습니다.

TYPE unix_file | FIND /V "" > dos_file

PowerShell에는 이 질문 에서 수행 한 작업을 반대로하여 여러 가지 방법으로이를 수행 할 수 있습니다.

(Get-Content $file -Raw).Replace("`n", "`r`n") | Set-Content $path -Force

(Get-Content $infile) -join "`r`n" > $outfile

$text = [IO.File]::ReadAllText($original_file) -replace "`n", "`r`n"
[IO.File]::WriteAllText($original_file, $text)

타사 응용 프로그램을 설치하지 않고 Windows에서 이미 사용할 수있는 도구 인 VBScriptJScript에서도이 작업을 수행 할 수 있습니다.


0

내 리눅스 배포판라는 두 개의 작은 유틸리티가 있습니다 fromdos그리고 todos나는이 작업을 위해 사용하는.


OP는 Windows 도구를
phuclv

-2

나는 '편집'에서 파일을 열고 작업이 완료되었을 때 저장했습니다 ...


"편집"이란 무엇입니까? Windows 10에는 그러한 도구가 없습니다
phuclv


분명히 editDOS에서 사용 했지만이 질문은 Windows
phuclv

1
edit이전까지 Windows의 일부였습니다 Windows XP. 내 대답은 약 8 살입니다. 당시 edit대부분의 경우 Windows 설치의 일부였습니다 ...
Radek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.