Unix satır sonlarını Windows'a dönüştür


38

Geçenlerde Linux'tan Windows'a geri döndüm. Bazı dosyalarda CRLF, bazılarında LF ve bazılarında karışık var. Tüm Unix dokunmuş dosyalarımı bulmama ve bunları uygun CRLF sonlandırılmış dosyalarına dönüştürmeme yardımcı olacak bir yardımcı program var mı?

Yardımcı program Linux'ta değil, Windows'ta çalışmalıdır. Ben çoktan taşındım. Bundan kaçınabilsem Cygwin'i yüklemeyi tercih ederim .


1
ilgili: bkz. superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... bunlarda bahsi geçen herhangi bir araç, yapmak istediğinizi başarmak için tersine çevrilebilir
quixote

Yinelenen soru
ukanth

Çift sorular olarak adlandırılanların tümü linux platformlarında çalışır veya tam tersi dönüşümü gerçekleştirir. Artık linux yok. Benim pencerelerim var.
Matthew Scouten

1
hepsi Windows için Cygwin, GnuWin32, UnxUtils veya benzerleri ile kullanılabilir. Bunu yapabilecek kadar Powershell betiği olduğuna inanıyorum, ancak herhangi bir bağlantı sağlayacak kadar bilgim yok.
quix quixote

1
@quack: Soru özellikle, kullanıcının bir Windows yardımcı programını kullanarak Windows'ta işi yapacak bir şey aradığını belirtir.
Brian Lacy

Yanıtlar:


34

Bunları unix2dosLinux platformunuzdaki yardımcı program ile dönüştürebilirsiniz . unix2dos Windows için de versiyonlar mevcut .

Eğer Perl'i kurduysanız, şu bir lineri de kullanabilirsiniz:

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

Buna benzer bir şey yaptım ama python kullandım.
Matthew Scouten

2
@Matthew Scouten: yani ... Windows'ta çalışan bir unix yardımcı programı buldun! tebrikler!
quix quixote

8
Evet ve hayır. Kendi patlatılmış yardımcı programımı YAZDIR. Bunu baştan yapabilirdim, ama 30 dakika kazanmayı umuyordum. Maalesef mevcut tüm olanaklardan memnun değildim. Bulunan en yakın dizinde herhangi bir ikili dosyaları bozuk.
Matthew Scouten

Dos2unix ve unix2dos ile dönüştürme sorunları var - eğer dosya karışık CRLF ve LF içeriyorsa, değiştirilmeyecek bazı olaylar olabilir.
pbies

17

İşte kolay ve hızlı bir yol.

Metin dosyasını Chrome'a ​​sürükleyip bırakın (diğer tarayıcılar hakkında bilgim yok) ve ardından yeniden kesip orijinal dosyaya yapıştırın :)


2
hehe… bu cevap beni lol yaptı
ClintM

tüm tarayıcılar, IE dahil, Unix satır sonlarını gayet iyi okuyabilir. Ancak o zaman bile wordpad de bunu yapabilir ve böylece modern Not Defteri de olur . Burada önemli olan birden fazla dosyayı otomatik olarak nasıl dönüştürebileceğinizdir
phuclv

10

Yinelenerek klasörler arasında dolaşmak, dosya filtrelerine izin vermek ve "\ r \ n" için basit bir arama yapmak ve onu yalnızca "\ n" ile değiştirmek için en iyi bulduğum notepad ++ idi .

Notepad ++, Windows için en iyi, ücretsiz, açık kaynaklı not defteri programlarından biridir. Çok basit ve güçlü. Sadece arama bittikten sonra arama / değiştirme satırını kullandı. Yüklenici, Linux \ r \ n satır sonları ile havuzumuza bir sürü .c ve .h dosyasını kontrol eder, ancak çoğu kişi Windows / Eclipse derleme araçlarında standardize edildiğinden, dosyalar satır sonları dönüştürülene kadar oluşturulmayacaktır. .


8
Sanırım sonları tersine çevirdin: linux \ n, pencereler \ r \ n
Matthew Scouten

10
Edit -> EOL ConversionDönüştürülecek dosya sayısının az olması durumunda Notepad ++ 'ın basit bir menüsü de vardır .
user1071136

8

İsviçre Dosya Bıçağını kullanın .

Örneğin: sfk addcr -dir . -file .txt -norec
geçerli dizinin tüm .txt dosyalarında, Windows için LF sonlarını CR / LF olarak değiştirir, ancak alt dizinlerde DEĞİL (özyineleme yok).

Ancak bu program bundan çok daha fazlasını yapıyor.


Ben belirtmeyen -norecben tekrarlama olmasını istediğim çünkü bunun gibi görünmüyor
Csaba Toth

6

Cygwin'de, iki yerleşik yardımcı program kullanarak Unix ve "DOS" AKA Windows dosyaları arasında dönüştürme yapabilirsiniz:

DOS CR / LF formatına dönüştür:

u2d filename

Unix CR formatına geri dönün:

d2u filename

Dosya aynı adda yerinde bırakılır.

Keyfini çıkarın! burkulma


Bu bazen denir dos2unixveya unix2dosu2d veya d2u olarak bulamazsanız. Ayrıca varunix2mac
gtatr 19:18 '

3

Bu çözümü oraya fırlatacağım. Git bunu yapacak. Bu yayına bakın

Teorik olarak bunu bütün bir ağacı dönüştürmek için yapabilirsin.

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

Değiştir crlfiçin lfdiğer bir yol gitmek istiyorum. NOT: Henüz bitmedi, okumaya devam et

Tip git statusdosyalar etkilenecek görmek için. Gibi satır eklemek zorunda kalabilirsiniz

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

.gitattributesBelirli dosyaları dönüştürmekten kaçınmak için vb . Ayrıca belirli dosyaları metin olarak işaretleyebilirsiniz

*.md text
*.css text

O zaman düzenledikten sonra bu 2 satırı tekrarla .gitattributes

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

Sonra git statushangi dosyaların değişeceğini görmek için tekrar kullanın. Etkilenmesini istediğiniz tüm dosyaların listelendiğinden emin git statusolduktan sonra

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

şimdi tüm dosyaları tekrar kontrol et

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

Şimdi istediğiniz satır sonları ne olursa olsun olmalıdır

** NOT: Zaten git kullanıyorsanız ilk 3 komutu atla komutları atlayın. Git'i kullanmadıysanız, şimdi .gitattributesdosyayı ve .gitklasörü silebilirsiniz .

** Dosyalarınızı yedekleyin: git rm --cached -rhepsini siler (her ne kadar teorik olarak git repo'nuzda (.git klasörü) olmasına rağmen bu, son komut tarafından geri yüklenme şeklidir git reset --hard. yukarı.


1

Tüm dosyalarınızda biten tüm satırları dönüştürmeniz gerekmiyorsa, ancak ilk satırda biriken dosyanın tamamını görmek istemiyorsanız , SciTE veya Notepad ++ gibi her iki satır sonunu da anlayan bir metin düzenleyici kullanın .


Linux'a geçerken ters problem yaşarken söylediğim şey buydu. Yanlış satır sonları ile ilgili problemleri olan araçlara rastladım. HİÇBİR ŞEY karışık çizgi sonlarını makul şekilde işler.
Matthew Scouten

@Matthew scite tanıtıcısı unix / windows satırının doğru bittiğini biliyorum . Bu amaçla, ana bilgisayar sistemindeki dosyaları düzenlerken linux'ta çalıştığım pencerelerde kullanıyorum.
nelaaro

Tavsiye ettiğin editörlerin işe yarayacağından eminim. ancak bir noktada, metin dosyasını başka bir araca beslemem gerekecek ve bu araç DEĞİL olacak. Bu noktada, işleri iyi yapan bir metin editörünün olması sorunu gizleyerek daha da kötüleşecektir. ve karışık uçları hala kötü bir şekilde (veya en azından tuhaflıklar ile) idare edeceğine bahse girerim.
Matthew Scouten

1
Yalan sonlarını dönüştürmek için notepad + + seçeneği için +1. Ve burada ( "yöntemi 2" bölümüne bakın) daha spesifik yapmak için yapılması gerekenler: staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
çalışması devam ediyor

Notepad ++ zaten diğer şeylerin yanı sıra satır sonlarını, kodlamaları dönüştürmek için de çözümlere sahiptir
phuclv

0

TEXT dosyalarında eoln karakterlerini çevirmenin birçok yolu vardır ve herkesin bir favorisi vardır.

Ancak BINARY modunda her zaman Linux'tan Windows'a dosya aktarırım, sonra da TEXT dosyalarını Windows'ta her iki türü de açabilen ve gerekirse her iki biçimde de kaydedebilen bir düzenleyici ile açarım.

Bunun için Programcılar Dosya Düzenleyicisi'ni kullandım, ancak Notepad ++ bunu yapabilir. WordPad ayrıca [en azından LF sonlandırılmış dosyaları görüntülemek için ] de kullanışlıdır .

Linux kaynaklı basit metin dosyalarını düşünüyorum ve Windows'un (varsayılan standart) dünyasında okunabilir olması gerekiyor. 'Unix-touch-dokundu dosyaları' ile ne kastettiğinizden emin değilim.


Bu yöntemle ilgili sorun, bir seferde yalnızca bir dosya yapmasıdır.
Matthew Scouten

'unix-touched files' sadece LF ve karışık CRLF-LF dosyaları için benim sözümdür. Bir dosya unix-oid araçlarında düzenlendiğinde, sadece LF satırları ile 'enfekte' olma eğilimindedir.
Matthew Scouten

2
Gerçekten demek istediğim, metin dosyalarını görüntülemek için doğru yazılımı seçerek, dönüştürülmeleri gerekmiyordu. BTW, CRLF sonlandırılmış dosyaları 'uygun' olarak tanımlamak için sizi görevlendirmekten kaçındım. Bu tamamen sizin bakış açınıza bağlı. Her yöntem kendi işletim sisteminde uygundur. Bir dosya farklı bir işletim sistemine taşındığında, Win / Mac / Linux'un tamamen farklı olduğunu görürüz. Unix / Linux yönteminin asıl yöntem olduğundan şüpheleniyorum.
Pavium

3
Yanlış şüphelisin. ASCII standardı başlangıçta teletype makineleri için geliştirildi ve CRLF'yi zorunlu kıldı. İnternet protokollerinin çoğu (HTTP, SMTP, FTP, IRC ve diğerleri dahil) CRLF sonları gerektirir (çoğu uygulama uyumlu olmayan Unix programlarıyla uyumluluk için çıplak LF kabul eder). Bu durumda, Windows standardı izliyor ve Unix ve Mac onu kırıyor.
Matthew Scouten

0

Daha fazla seçenek sunmak için ( user45832'nin hack cevabını en iyi şekilde kullanıyor olmama rağmen ):

Çevrimiçi çeviriciler

Bir GUI FTP programı otomatik olarak yapacak sanırım

Toplu İş / DOS tek astar (boş satırları kaldırır) :

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

Güç kalkanı:

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

Buradan son ikisini aldım.


0

Windows için AWK'yi edinin .

Unix satır sonlarını Windows satır sonlarına dönüştür:

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

Windows satır sonlarını Unix satır sonlarına dönüştür:

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

Eski sürümleri işlevi awkiçermez sub. Bu gibi durumlarda, aynı komutu kullanın, ancak veya awkile değiştirin .gawknawk

Kaynak


0

Wikipedia'da cmd olarak bir çözüm var:

TYPE unix_file | FIND /V "" > dos_file

PowerShell'de, bu soruda yapılanları tersine çevirerek bunu yapmanın çeşitli yolları vardır .

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

Bunu , üçüncü taraf bir uygulama yüklemeden Windows'ta zaten mevcut olan araçlar olan VBScript ve JScript'te de yapmak mümkündür .


0

Linux dağıtımımda iki küçük yardımcı program var fromdosve todosbu görev için kullanıyorum.


OP bir Windows aracı
phuclv

-2

Dosyayı 'edit' de açıp işin yapıldığı şekilde saklanırdım ...


"düzenleme" nedir? Windows 10'da böyle bir araç yok
phuclv


Açıkçası editDOS'ta kullandım ama bu soru Windows
phuclv

1
editeskiden Windows'un bir parçasıydı Windows XP. Cevabım yaklaşık 8 yaşında. O zamanlar editbirçok durumda Windows kurulumunun bir parçasıydı ...
Radek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.