แปลงจุดปลาย Unix เป็น Windows


37

ฉันเพิ่งย้ายกลับไปยัง Windows จาก Linux ฉันมีไฟล์บางไฟล์ที่มี CRLF บางไฟล์ที่มี LFS และบางไฟล์รวมกัน มียูทิลิตี้ที่จะช่วยฉันค้นหาไฟล์ Unix-touched ทั้งหมดของฉันและแปลงเป็นไฟล์ CRLF ที่ถูกยกเลิกหรือไม่?

ยูทิลิตี้นี้จะต้องทำงานบน Windows ไม่ใช่ Linux ฉันได้ย้ายแล้ว ฉันไม่ควรติดตั้งCygwinหากฉันสามารถหลีกเลี่ยงได้


1
ที่เกี่ยวข้อง: ดูsuperuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... เครื่องมือใด ๆ ที่กล่าวถึงในสิ่งเหล่านี้สามารถย้อนกลับเพื่อบรรลุสิ่งที่คุณต้องการ
quack quixote

คำถามที่ซ้ำกัน
ukanth

การแก้ปัญหาในคำถามที่เรียกว่าซ้ำกันทั้งหมดทำงานบนแพลตฟอร์มลินุกซ์หรือ preform การแปลงตรงข้าม ฉันไม่มี linux อีกแล้ว ฉันมีหน้าต่าง
Matthew Scouten

1
พวกมันมีให้สำหรับ Windows ผ่าน Cygwin, GnuWin32, UnxUtils หรือสิ่งที่คล้ายกัน ฉันเชื่อว่ามีสคริปต์ของ Powershell ที่สามารถทำสิ่งนี้ได้เช่นกัน แต่ฉันก็ไม่รู้พอที่จะให้ลิงก์ใด ๆ
ต้มตุ๋น Quixote

1
@quack: คำถามนี้ระบุว่าผู้ใช้กำลังมองหาบางอย่างที่จะทำงานบน Windows โดยใช้ยูทิลิตี้ Windows
Brian Lacy

คำตอบ:


33

คุณสามารถแปลงเป็นunix2dosยูทิลิตี้บนแพลตฟอร์ม Linux ของคุณ มีunix2dos รุ่นสำหรับ Windowsเช่นกัน

หากคุณติดตั้ง Perl ไว้คุณสามารถใช้สายการบินเดียวนี้ได้:

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

ฉันทำสิ่งที่คล้ายกับสิ่งนี้ แต่ฉันใช้หลาม
Matthew Scouten

2
@ Matthew Scouten: ดังนั้น ... คุณพบยูทิลิตี้ยูนิกซ์ที่ทำงานบน Windows! ยินดีด้วย!
ต้มตุ๋น Quixote

8
ใช่และไม่. ฉันทำลายอรรถประโยชน์ที่เสียหายของตัวเอง ฉันสามารถทำสิ่งนี้ได้ตั้งแต่เริ่มต้น แต่ฉันหวังว่าจะประหยัดได้ 30 นาที น่าเสียดายที่ฉันไม่มีความสุขกับสาธารณูปโภคที่มีให้ ฉันพบที่ใกล้ที่สุดเสียหายไฟล์ไบนารีใด ๆ ในไดเรกทอรี
Matthew Scouten

มีปัญหาในการแปลงกับ dos2unix และ unix2dos - หากไฟล์มีการผสม CRLF และ LF อาจมีบางเหตุการณ์ที่ไม่สามารถแทนที่ได้
pbies

17

นี่เป็นวิธีที่ง่ายและรวดเร็ว

ลากและวางไฟล์ข้อความลงใน Chrome (ฉันไม่รู้เกี่ยวกับเบราว์เซอร์อื่น) จากนั้นตัดและวางกลับไปที่ไฟล์ต้นฉบับ :)


2
hehe …คำตอบนี้ทำให้ฉัน lol
ClintM

เบราว์เซอร์ทั้งหมดสามารถอ่านจบบรรทัด Unix ได้ดีรวมถึง IE แต่ถึงกระนั้น Wordpad ก็ยังสามารถทำเช่นนั้นได้และNotepad สมัยใหม่จะเป็นเช่นนั้น สิ่งที่สำคัญที่นี่คือวิธีการแปลงไฟล์หลาย ๆ ไฟล์โดยอัตโนมัติ
phuclv

10

หนึ่งผมพบว่าดีที่สุดสำหรับการซ้ำจะผ่านโฟลเดอร์ช่วยให้ฟิลเตอร์ไฟล์และช่วยให้ค้นหาง่ายสำหรับ "\ r \ n" และแทนที่ด้วยเพียงแค่ "\ n" เป็นNotepad ++

Notepad ++ เป็นหนึ่งในโปรแกรม notepad โอเพนซอร์สที่ดีที่สุดฟรีสำหรับ Windows มันง่ายและทรงพลัง มันจัดการการค้นหาที่ลงท้ายด้วยบรรทัด / แทนที่ได้ดี ผู้รับเหมาตรวจสอบไฟล์. c และ. h ในที่เก็บข้อมูลของเราด้วยจุดสิ้นสุดบรรทัด Linux \ r \ n แต่เนื่องจากคนส่วนใหญ่มีมาตรฐานในเครื่องมือสร้าง Windows / Eclipse ไฟล์จะไม่สร้างจนกว่าจะสิ้นสุดการแปลงบรรทัด .


8
ฉันคิดว่าคุณย้อนกลับตอนจบที่นั่น: linux คือ \ n, windows is \ r \ n
Matthew Scouten

10
Notepad ++ ยังมีEdit -> EOL Conversionเมนูง่าย ๆหากจำนวนไฟล์ที่จะแปลงมีขนาดเล็ก
user1071136

8

ใช้ไฟล์มีดสวิส

ตัวอย่างเช่น: sfk addcr -dir . -file .txt -norec
เปลี่ยน LF ตอนจบเป็น CR / LF สำหรับ Windows ในไฟล์. txt ทั้งหมดของไดเรกทอรีปัจจุบัน แต่ไม่อยู่ในไดเรกทอรีย่อย (ไม่มีการเรียกซ้ำ)

แต่โปรแกรมนี้ทำมากกว่านั้น


ฉันไม่ได้ระบุ-norecเพราะฉันต้องการเรียกซ้ำเกิดขึ้น แต่ดูเหมือนจะไม่เป็นเช่นนั้น
Csaba Toth

6

บน Cygwin คุณสามารถแปลงระหว่าง Unix และ "DOS" ไฟล์ AKA Windows โดยใช้ยูทิลิตี้ในตัวสองตัว:

แปลงเป็นรูปแบบ DOS CR / LF:

u2d filename

แปลงกลับเป็นรูปแบบ Unix CR:

d2u filename

ไฟล์ถูกเก็บไว้ในชื่อเดียวกัน

สนุก! กองหญ้าแห้ง


บางครั้งสิ่งนี้ถูกเรียกdos2unixหรือunix2dosในกรณีที่คุณไม่สามารถหามันเป็น u2d หรือ d2u นอกจากนี้ยังมีunix2mac
gtatr

3

ฉันจะทิ้งโซลูชันนี้ไว้ที่นั่น Git จะทำเช่นนี้ ดูโพสต์นี้เกี่ยวกับมัน

ในทางทฤษฎีคุณสามารถทำสิ่งนี้เพื่อแปลงต้นไม้ทั้งหมด

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

เปลี่ยนcrlfเป็นlfถ้าคุณต้องการไปทางอื่น หมายเหตุ: คุณยังไม่ได้อ่านต่อ

พิมพ์git statusเพื่อดูว่าไฟล์ใดจะได้รับผลกระทบ คุณอาจต้องเพิ่มบรรทัดเช่น

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

ฯลฯ เพื่อ.gitattributesหลีกเลี่ยงการแปลงไฟล์บางไฟล์ นอกจากนี้คุณยังสามารถทำเครื่องหมายไฟล์บางไฟล์เป็นข้อความได้อย่างชัดเจน

*.md text
*.css text

จากนั้นเพียงแค่ทำซ้ำ 2 บรรทัดนี้หลังจากที่คุณแก้ไข .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 อยู่แล้วให้ข้ามคำสั่ง git 3 คำสั่งแรก หากคุณไม่ได้ใช้ git คุณสามารถลบ.gitattributesไฟล์และ.gitโฟลเดอร์ได้แล้ว

** สำรองไฟล์ของคุณ: git rm --cached -rลบมันทั้งหมด (แม้ว่าพวกมันจะมีเหตุผลใน repo git ของคุณ (โฟลเดอร์. git) ซึ่งเป็นวิธีที่พวกเขาได้รับการกู้คืนโดยคำสั่งสุดท้ายgit reset --hardมันเป็นเพราะไฟล์จะถูกลบ ขึ้น


1

การกระจาย Linux ของฉันมีสองยูทิลิตี้เล็ก ๆ ที่เรียกว่าfromdosและtodosที่ฉันใช้สำหรับงานนี้


OP กำลังขอเครื่องมือ Windows
phuclv

1

ใช้โปรแกรมแก้ไขข้อความที่เข้าใจทั้งจุดสิ้นสุดของบรรทัดเช่นSciTEหรือNotepad ++หากคุณไม่ต้องการแปลงทุกบรรทัดที่ลงท้ายด้วยไฟล์ทั้งหมดของคุณ แต่ไม่ต้องการเห็นไฟล์ทั้งหมดที่รวมอยู่ในบรรทัดแรก


นั่นคือสิ่งที่พวกเขาพูดเมื่อฉันมีปัญหาผกผันในขณะที่เปลี่ยนเป็นลินุกซ์ ฉันยังคงทำงานเป็นเครื่องมือที่มีปัญหากับการวางสายผิด และไม่มีอะไรจัดการจุดจบของเส้นผสมอย่างสมเหตุสมผล
Matthew Scouten

@ Matewew ฉันรู้ว่า scite จัดการจุดสิ้นสุดบรรทัดunix / windowsอย่างถูกต้อง ฉันใช้เพื่อจุดประสงค์ใน windows vms ที่ฉันเรียกใช้ใน linux เมื่อแก้ไขไฟล์ในระบบโฮสต์
nelaaro

ฉันแน่ใจว่าบรรณาธิการที่คุณแนะนำจะทำงานได้ดี แต่ในบางครั้งฉันจะต้องป้อนไฟล์ข้อความไปยังเครื่องมืออื่นและเครื่องมือนั้นจะไม่ ณ จุดนี้การมีโปรแกรมแก้ไขข้อความที่จัดการสิ่งต่าง ๆ ได้ดีจะทำให้แย่ลงโดยการซ่อนปัญหา และฉันจะเดิมพันว่ามันยังคงจัดการกับตอนจบแบบผสมไม่ดี (หรืออย่างน้อยก็มีนิสัยใจคอ)
Matthew Scouten

1
+1 สำหรับตัวเลือกแผ่นจดบันทึก ++ เพื่อแปลงตอนจบของคำโกหก และนี่คือวิธีการทำมากขึ้นโดยเฉพาะ (ดู "วิธีที่ 2"): staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
WIP

แผ่นจดบันทึก ++ มีวิธีแก้ไขปัญหาการแปลงจุดสิ้นสุดบรรทัดเข้ารหัสในสิ่งอื่น ๆ แล้ว
phuclv

0

มีหลายวิธีในการแปลอักขระ eoln ในไฟล์ TEXT และทุกคนมีความชื่นชอบ

แต่ฉันมักจะถ่ายโอนไฟล์จาก Linux ไปยัง Windows ในโหมด BINARY จากนั้นฉันเปิดไฟล์ TEXT ใน Windows ด้วยโปรแกรมแก้ไขที่สามารถเปิดทั้งสองประเภทและบันทึกไฟล์ในรูปแบบใดรูปแบบหนึ่งหากจำเป็น

ฉันใช้ Programmers File Editor สำหรับสิ่งนี้ แต่ Notepad ++ ก็สามารถทำได้เช่นกัน WordPad ยังมีประโยชน์ [อย่างน้อยสำหรับการดูไฟล์ที่ยกเลิก LF]

ฉันกำลังคิดถึงไฟล์ข้อความธรรมดา ๆ ที่อาจมีต้นกำเนิดมาจาก Linux และจำเป็นต้องอ่านในโลก (มาตรฐาน defacto) ของ Windows ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึง 'ไฟล์ unix-touched'


ปัญหาเกี่ยวกับวิธีนี้คือจะทำทีละไฟล์เท่านั้น
Matthew Scouten

'ไฟล์ unix-touched' เป็นคำของฉันสำหรับทั้งไฟล์ LF-only และไฟล์ผสม CRLF-LF เมื่อไฟล์ถูกแก้ไขในเครื่องมือ unix-oid มันจะทำให้ 'ติดเชื้อ' ด้วยบรรทัด LF-only
Matthew Scouten

2
สิ่งที่ฉันพูดจริง ๆก็คือโดยการเลือกซอฟต์แวร์ที่เหมาะสมสำหรับการดูไฟล์ข้อความพวกเขาไม่จำเป็นต้องแปลงเลย BTW ฉันหลีกเลี่ยงที่จะพาคุณไปทำงานเพื่ออธิบายไฟล์ที่ถูกยกเลิก CRLF ว่า 'เหมาะสม' ขึ้นอยู่กับมุมมองของคุณ แต่ละวิธีมีความเหมาะสมในระบบปฏิบัติการของตัวเอง เมื่อไฟล์ถูกย้ายไปยังระบบปฏิบัติการอื่นเราจะพบว่า Win / Mac / Linux นั้นแตกต่างกันทั้งหมด ฉันสงสัยว่าวิธี Unix / Linux เป็นวิธีการดั้งเดิม
pavium

3
คุณสงสัยว่าผิด มาตรฐาน ASCII เดิมพัฒนาขึ้นสำหรับเครื่องโทรพิมพ์และได้รับคำสั่ง CRLF โปรโตคอลอินเทอร์เน็ตส่วนใหญ่ (รวมถึง HTTP, SMTP, FTP, IRC และอื่น ๆ อีกมากมาย) ต้องใช้ตอนจบ CRLF (การใช้งานส่วนใหญ่ยอมรับ LF เปล่าสำหรับความเข้ากันได้กับโปรแกรม Unix ที่ไม่สอดคล้อง) ในกรณีนี้ Windows จะปฏิบัติตามมาตรฐานและ Unix และ Mac กำลังแตกหัก
Matthew Scouten

0

หากต้องการเสนอตัวเลือกเพิ่มเติม (แม้ว่าฉันจะชอบคำตอบแฮ็กของผู้ใช้ 45832 ):

ตัวแปลงออนไลน์

ฉันเดาว่าโปรแกรม GUI FTP จะทำโดยอัตโนมัติ

Batch / DOS หนึ่งซับ(ลบบรรทัดว่าง) :

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

Powershell:

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

มีสองคนสุดท้ายจากที่นี่


0

รับAWK สำหรับ Windows

แปลงจุดสิ้นสุดบรรทัด Unix เป็นจุดสิ้นสุดบรรทัด Windows:

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

แปลงจุดสิ้นสุดบรรทัด Windows เป็น Unix line endings:

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

รุ่นที่เก่ากว่าawkไม่รวมsubฟังก์ชั่น ในกรณีดังกล่าวใช้คำสั่งเดียวกัน แต่แทนที่awkด้วยหรือgawknawk

แหล่ง


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)

เป็นไปได้ที่จะทำเช่นนี้ในVBScriptและJScriptซึ่งเป็นเครื่องมือที่มีอยู่แล้วใน Windows โดยไม่ต้องติดตั้งแอปพลิเคชันบุคคลที่สาม


-2

ฉันเคยเปิดไฟล์ใน 'แก้ไข' และบันทึกตามที่งานเสร็จ ...


"แก้ไข" คืออะไร ไม่มีเครื่องมือดังกล่าวใน windows 10
phuclv


เห็นได้ชัดว่าผมเคยใช้editใน DOS แต่คำถามนี้เป็นเรื่องเกี่ยวกับ Windows
phuclv

1
editเคยเป็นส่วนหนึ่งของ Windows Windows XPถึง คำตอบของฉันคือประมาณ 8 ปี ในช่วงเวลานั้นeditเป็นส่วนหนึ่งของการติดตั้ง Windows ในหลายกรณี ...
Radek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.