Konversi ujung garis Unix ke Windows

38

Saya baru saja pindah kembali ke Windows dari Linux. Saya memiliki beberapa file dengan CRLF, beberapa dengan LF dan beberapa yang dicampur. Apakah ada utilitas yang akan membantu saya menemukan semua file yang saya sentuh Unix dan mengonversinya menjadi file yang diakhiri CRLF dengan benar?

Utilitas harus dijalankan pada Windows, bukan Linux. Saya sudah pindah. Saya lebih suka tidak menginstal Cygwin jika saya bisa menghindarinya.

Matthew Scouten
sumber
1
terkait: lihat superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... alat apa pun yang disebutkan di dalamnya dapat dibalik untuk mencapai apa yang ingin Anda lakukan
quack quixote
Pertanyaan
rangkap
Solusi dalam pertanyaan yang disebut Duplikat semua berjalan di platform linux atau melakukan konversi sebelumnya. Saya tidak punya linux lagi. Saya punya windows.
Matthew Scouten
1
semuanya tersedia untuk Windows melalui Cygwin, GnuWin32, UnxUtils atau sejenisnya. saya percaya ada skrip Powershell yang dapat melakukan ini juga, meskipun saya tidak cukup tahu tentang hal itu untuk memberikan tautan apa pun.
Quack quixote
1
@ quack: Pertanyaannya secara spesifik menyatakan bahwa pengguna mencari sesuatu yang akan melakukan pekerjaan pada Windows, menggunakan utilitas Windows.
Brian Lacy

Jawaban:

34

Anda dapat mengonversinya dengan unix2dosutilitas di platform Linux Anda. Ada unix2dos versi yang tersedia untuk Windows juga.

Jika Anda memasang Perl, Anda juga dapat menggunakan liner satu ini:

perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
John T
sumber
Saya melakukan sesuatu yang mirip dengan ini, tetapi saya menggunakan python.
Matthew Scouten
2
@Matthew Scouten: jadi ... Anda menemukan utilitas unix yang berjalan di windows! selamat!
quack quixote
8
iya dan tidak. Saya MENULIS utilitas peledakan saya sendiri. Saya bisa melakukan ini dari awal, tetapi saya berharap untuk menghemat 30 menit. Sayangnya saya tidak senang dengan utilitas yang tersedia. Yang paling dekat yang saya temukan rusak file biner dalam direktori.
Matthew Scouten
Ada masalah konversi dengan dos2unix dan unix2dos - jika file tersebut dicampur CRLF dan LF mungkin ada beberapa kejadian yang tidak akan diganti.
pai
17

Ini cara yang mudah dan cepat.

Seret dan jatuhkan file teks ke Chrome (saya tidak tahu tentang browser lain) dan kemudian potong dan tempel kembali ke file asli :)

pengguna45832
sumber
2
hehe… jawaban ini membuat saya tertawa
ClintM
semua browser dapat membaca akhiran baris Unix dengan baik, termasuk IE. Tetapi meskipun begitu Wordpad juga dapat melakukan itu, dan begitu pula Notepad modern . Yang penting di sini adalah bagaimana mengkonversi beberapa file secara otomatis
phuclv
10

Yang saya temukan terbaik untuk secara rekursif melalui folder, memungkinkan filter file dan memungkinkan pencarian sederhana untuk "\ r \ n" dan menggantinya dengan hanya "\ n" adalah Notepad ++ .

Notepad ++ adalah salah satu program notepad open source terbaik, gratis, untuk Windows. Ini sangat sederhana dan kuat. Ini menangani pencarian garis akhir / ganti saja. Seorang kontraktor memeriksa sekelompok file .c dan .h di repositori kami dengan akhiran Linux \ r \ n, tetapi karena sebagian besar orang telah distandarisasi pada alat bantu pembuatan Windows / Eclipse, file tidak akan dibangun sampai akhiran baris dikonversi .

Mat
sumber
8
Saya pikir Anda membalikkan ujungnya di sana: linux adalah \ n, windows adalah \ r \ n
Matthew Scouten
10
Notepad ++ juga memiliki Edit -> EOL Conversionmenu sederhana jika jumlah file yang dikonversi kecil.
user1071136
8

Gunakan Pisau File Swiss .

Misalnya: sfk addcr -dir . -file .txt -norec
mengubah ujung LF menjadi CR / LF untuk Windows, pada semua file .txt dari direktori saat ini, tetapi BUKAN dalam subdirektori (tanpa rekursi).

Tetapi program ini melakukan lebih dari itu.

harrymc
sumber
Saya tidak merinci -noreckarena saya ingin rekursi terjadi tetapi sepertinya tidak
Csaba Toth
6

Di Cygwin, Anda dapat mengonversi antara file Windows AKA Unix dan "DOS" menggunakan dua utilitas bawaan:

Konversikan ke format DOS CR / LF:

u2d filename

Konversi kembali ke format Unix CR:

d2u filename

File dibiarkan di tempat dengan nama yang sama.

Nikmati! Rick

Rick V
sumber
Ini kadang-kadang disebut dos2unixatau unix2dosjika Anda tidak dapat menemukannya sebagai u2d atau d2u. Ada jugaunix2mac
gtatr
3

Saya akan membuang solusi ini di luar sana. Git akan melakukan ini. Lihat posting ini tentang itu

Jadi secara teoritis Anda bisa melakukan ini untuk mengubah seluruh pohon

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

Ubah crlfke lfjika Anda ingin pergi ke arah lain. CATATAN: Anda belum selesai, terus membaca

Ketik git statusuntuk melihat file mana yang akan terpengaruh. Anda mungkin harus menambahkan baris seperti

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

dll untuk .gitattributesmenghindari konversi file tertentu. Anda juga dapat secara eksplisit menandai file tertentu sebagai teks

*.md text
*.css text

Kemudian ulangi saja 2 baris ini setelah Anda mengedit .gitattributes

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

Kemudian gunakan git statuslagi untuk melihat file mana yang akan diubah. Ketika Anda yakin semua file yang Anda inginkan terpengaruh terdaftar git statussaat itu komit

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

sekarang periksa semua file lagi

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

Mereka sekarang harus memiliki apa pun yang Anda inginkan

** CATATAN: Jika Anda sudah menggunakan git, lewati 3 perintah pertama perintah git. Jika Anda tidak menggunakan git, Anda sekarang dapat menghapus .gitattributesfile dan .gitfolder.

** Cadangkan file Anda: git rm --cached -rmenghapus semuanya (walaupun secara teoritis ada di git repo Anda (folder .git) yang merupakan cara mereka dipulihkan oleh perintah terakhir git reset --hard. Hanya karena file dihapus, mungkin yang terbaik adalah mendukungnya naik.

gman
sumber
1

Gunakan editor teks yang memahami kedua ujung baris seperti SciTE , atau Notepad ++ jika Anda tidak perlu mengonversi semua baris yang diakhiri dengan semua file Anda, tetapi hanya tidak ingin melihat seluruh file berkumpul di baris pertama.

nelaaro
sumber
Itulah yang mereka katakan ketika saya memiliki masalah terbalik saat beralih ke linux. Saya terus berlari ke alat yang memiliki masalah dengan ujung garis yang salah. Dan TIDAK ADA menangani ujung garis campuran secara wajar.
Matthew Scouten
@ Matius Saya tahu scite handle unix / windows line endings dengan benar. Saya menggunakannya untuk tujuan itu di windows vms saya jalankan di linux ketika mengedit file pada sistem host.
nelaaro
Saya yakin editor yang Anda rekomendasikan akan bekerja dengan baik. tetapi pada titik tertentu, saya perlu memberi makan textfile ke beberapa alat lain, dan alat itu TIDAK akan. Pada titik itu, memiliki editor teks yang menangani hal-hal dengan baik akan membuatnya lebih buruk dengan menyembunyikan masalahnya. dan saya berani bertaruh bahwa itu masih menangani akhiran campuran dengan buruk (atau setidaknya dengan kebiasaan).
Matthew Scouten
1
+1 untuk opsi notepad ++ untuk mengonversi akhiran kebohongan. Dan di sini adalah bagaimana melakukan lebih khusus (lihat "Metode 2"): staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
WIP
Notepad ++ sudah memiliki solusi untuk mengonversi akhiran baris, penyandian, antara lain
phuclv
0

Ada banyak cara untuk menerjemahkan karakter eoln dalam file TEXT, dan setiap orang memiliki favorit.

Tapi saya selalu mentransfer file dari Linux ke Windows dalam mode BINARY, kemudian saya membuka file TEXT di Windows dengan editor yang mampu membuka kedua jenis, dan menyimpannya dalam bentuk apa pun, jika perlu.

Saya menggunakan Editor File Programmer untuk ini, tetapi Notepad ++ dapat melakukannya juga. WordPad juga berguna [setidaknya, untuk melihat file yang diakhiri LF].

Saya sedang memikirkan file teks sederhana yang mungkin berasal dari Linux, dan harus dapat dibaca di dunia (standar defacto) Windows. Saya tidak yakin apa yang Anda maksud dengan 'file yang belum disentuh'.

pavium
sumber
Masalah dengan metode ini adalah hanya melakukan satu file pada satu waktu.
Matthew Scouten
'file unix-touch' adalah kata saya untuk file CRLF-LF dan LF-only. Setelah file diedit di alat unix-oid, ia cenderung 'terinfeksi' dengan garis LF-only.
Matthew Scouten
2
Apa yang saya benar-benar mengatakan adalah bahwa dengan memilih perangkat lunak yang tepat untuk melihat file teks, mereka tidak harus dikonversi sama sekali. BTW, saya menghindari membawa Anda ke tugas untuk menggambarkan file yang dihentikan CRLF sebagai 'benar'. Itu sepenuhnya tergantung pada sudut pandang Anda. Setiap metode tepat di OS sendiri. Ketika sebuah file dipindahkan ke OS yang berbeda, maka kami menemukan bahwa Win / Mac / Linux semuanya berbeda. Saya menduga bahwa metode Unix / Linux adalah yang asli.
pavium
3
Anda curiga salah. Standar ASCII pada awalnya dikembangkan untuk mesin teletype, dan mengamanatkan CRLF. Sebagian besar protokol internet (termasuk HTTP, SMTP, FTP, IRC, dan banyak lainnya) juga memerlukan akhir CRLF (sebagian besar implementasi menerima LF telanjang untuk kompatibilitas dengan program Unix yang tidak patuh). Dalam hal ini, Windows mengikuti standar dan Unix dan Mac melanggar itu.
Matthew Scouten
0

Untuk menawarkan lebih banyak opsi (meskipun saya paling menikmati jawaban hack pengguna45832 ):

Konverter online

Saya kira program FTP GUI akan melakukannya secara otomatis

Batch / DOS one-liner (menghapus baris kosong) :

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

Powershell:

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

Dapatkan dua yang terakhir dari sini

gregg
sumber
0

Dapatkan AWK untuk Windows .

Ubah ujung jalur Unix ke ujung jalur Windows:

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

Ubah ujung jalur Windows ke ujung garis Unix:

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

Versi yang lebih lama awktidak termasuk subfungsi. Dalam kasus seperti itu, gunakan perintah yang sama, tetapi ganti awkdengan gawkatau nawk.

Sumber

Neeme Praks
sumber
0

Di Wikipedia ada solusi dalam cmd:

TYPE unix_file | FIND /V "" > dos_file

Di PowerShell ada berbagai cara untuk melakukannya dengan membalik apa yang dilakukan dalam pertanyaan ini .

(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)

Dimungkinkan juga untuk melakukan ini dalam VBScript dan JScript yang juga merupakan alat yang sudah tersedia di Windows tanpa menginstal aplikasi pihak ketiga.

phuclv
sumber
0

Distribusi Linux saya memiliki dua utilitas kecil yang disebut fromdosdan todosyang saya gunakan untuk tugas ini.

kutu buku
sumber
OP meminta alat Windows
phuclv
-2

Saya biasa membuka file di 'edit' dan menyimpan karena pekerjaan itu selesai ...

Radek
sumber
apa itu "edit"? tidak ada alat seperti itu di windows 10
phuclv
jelas saya sudah menggunakan editDOS tetapi pertanyaan ini adalah tentang Windows
phuclv
1
editdigunakan untuk menjadi bagian dari Windows hingga Windows XP. Jawaban saya sekitar 8 tahun. Pada waktu edititu adalah bagian dari instalasi Windows dalam banyak kasus ...
Radek