Konwertuj zakończenia linii uniksowych na Windows


38

Niedawno wróciłem do systemu Windows z systemu Linux. Mam niektóre pliki z CRLF, niektóre z LF, a niektóre są mieszane. Czy istnieje narzędzie, które pomoże mi znaleźć wszystkie moje pliki dotknięte Uniksem i przekonwertować je na prawidłowe pliki zakończone CRLF?

Narzędzie musi działać w systemie Windows, a nie Linux. Już się przeprowadziłem Wolałbym nie instalować Cygwin, jeśli mogę tego uniknąć.


1
powiązane: patrz superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... każde narzędzie wymienione w tych można odwrócić, aby osiągnąć to, co chcesz zrobić
quack quixote z

Duplikat pytania
ukanth

Rozwiązania w tych tak zwanych zduplikowanych pytaniach działają na platformach Linux lub wstępnie wykonują odwrotną konwersję. Nie mam już Linuksa. Mam okna.
Matthew Scouten

1
wszystkie są dostępne dla systemu Windows za pośrednictwem Cygwin, GnuWin32, UnxUtils lub podobnych. Wierzę, że istnieją również skrypty Powershell, które to potrafią, ale nie wiem o tym wystarczająco dużo, aby podać linki.
quack quixote

1
@ quack: Pytanie wyraźnie stwierdza, że ​​użytkownik szuka czegoś, co wykona zadanie w systemie Windows, za pomocą narzędzia Windows.
Brian Lacy

Odpowiedzi:


34

Możesz je przekonwertować za pomocą unix2dosnarzędzia na platformie Linux. Istnieją również unix2dos wersje dla systemu Windows .

Jeśli masz zainstalowany Perl, możesz również użyć tego jednego linera:

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

Zrobiłem coś podobnego do tego, ale użyłem Pythona.
Matthew Scouten

2
@Matthew Scouten: więc ... znalazłeś narzędzie uniksowe, które działa w systemie Windows! gratulacje!
quack quixote

8
tak i nie. ZROBIŁEM własne narzędzie do piaskowania. Mógłbym to zrobić od samego początku, ale miałem nadzieję zaoszczędzić 30 minut. Niestety nie byłem zadowolony z dostępnych narzędzi. Najbliższe, jakie znalazłem, uszkodziło wszystkie pliki binarne w katalogu.
Matthew Scouten

Występują problemy z konwersją z dos2unix i unix2dos - jeśli plik ma mieszane CRLF i LF, mogą wystąpić pewne zdarzenia, które nie zostałyby zastąpione.
pbies

17

Oto prosty i szybki sposób.

Przeciągnij i upuść plik tekstowy do Chrome (nie wiem o innych przeglądarkach), a następnie wytnij i wklej z powrotem do oryginalnego pliku :)


2
hehe… ta odpowiedź sprawiła, że ​​lol
ClintM

wszystkie przeglądarki potrafią dobrze odczytać zakończenia linii uniksowych, w tym IE. Ale nawet wtedy Wordpad może to zrobić, podobnie jak nowoczesny Notatnik . Ważne jest tutaj, jak automatycznie przekonwertować wiele plików
phuclv

10

Ten, który uznałem za najlepszy do rekurencyjnego przeglądania folderów, zezwalając na filtry plików i pozwalając na proste wyszukiwanie „\ r \ n” i zastąpienie go tylko „\ n”, to Notepad ++ .

Notepad ++ to jeden z najlepszych darmowych programów typu open source do notatników dla systemu Windows. To jest bardzo proste i potężne. Poradził sobie z zakończeniem wyszukiwania / zamiany wiersza. Wykonawca sprawdza kilka plików .c i .h w naszym repozytorium z zakończeniami linii Linux \ r \ n, ale ponieważ większość ludzi ustandaryzowała narzędzia do kompilacji Windows / Eclipse, pliki nie będą budowane, dopóki końcówki linii nie zostaną przekonwertowane .


8
Myślę, że odwróciłeś tam zakończenia: Linux to \ n, Windows to \ r \ n
Matthew Scouten

10
Notepad ++ ma również proste Edit -> EOL Conversionmenu, jeśli liczba plików do konwersji jest niewielka.
user1071136,

8

Użyj szwajcarskiego noża do pilników .

Na przykład: sfk addcr -dir . -file .txt -norec
zmienia końcówki LF na CR / LF dla Windows we wszystkich plikach .txt bieżącego katalogu, ale NIE w podkatalogach (bez rekurencji).

Ale ten program robi o wiele więcej niż tylko to.


Nie precyzuję, -norecponieważ chcę, aby miała miejsce rekurencja, ale nie wydaje się, żeby tak było
Csaba Toth,

6

W Cygwin można konwertować pliki systemu Windows AKA „Unix” na „DOS” za pomocą dwóch wbudowanych narzędzi:

Konwertuj na format DOS CR / LF:

u2d filename

Konwertuj z powrotem do formatu Unix CR:

d2u filename

Plik pozostawia się na miejscu o tej samej nazwie.

Cieszyć się! Stóg


Jest to czasami nazywane dos2unixlub unix2dosw przypadku, gdy nie można go znaleźć jako u2d lub d2u. Jest teżunix2mac
gtatr

3

Wyrzucę tam to rozwiązanie. Git to zrobi. Zobacz ten post na ten temat

Teoretycznie możesz to zrobić, aby przekonwertować całe drzewo

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

Zmień crlfna, lfjeśli chcesz iść w drugą stronę. UWAGA: jeszcze nie skończyłeś, czytaj dalej

Wpisz, git statusaby zobaczyć, które pliki zostaną zmienione. Może być konieczne dodanie linii takich jak

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

itp., aby .gitattributesuniknąć konwersji niektórych plików. Możesz także wyraźnie oznaczyć niektóre pliki jako tekst

*.md text
*.css text

Następnie po prostu powtórz te 2 wiersze po zakończeniu edycji .gitattributes

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

Następnie użyj git statusponownie, aby zobaczyć, które pliki zostaną zmienione. Gdy masz pewność, że wszystkie pliki, których dotyczy problem, zostaną wyświetlone, git statusa następnie zatwierdź

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

teraz sprawdź ponownie wszystkie pliki

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

Powinny mieć teraz dowolne pożądane zakończenia linii

** UWAGA: Jeśli już korzystałeś z git, pomiń pierwsze 3 polecenia git. Jeśli nie korzystałeś z git, możesz teraz usunąć .gitattributesplik i .gitfolder.

** Twórz kopie zapasowe plików: git rm --cached -rusuwa je wszystkie (chociaż teoretycznie znajdują się one w twoim repozytorium git (folderze .git), w taki sposób są przywracane przez ostatnie polecenie git reset --hard. Właśnie dlatego, że pliki są usuwane, prawdopodobnie najlepiej jest je wykonać w górę.


1

Użyj edytora tekstu, który obsługuje oba zakończenia linii, takiego jak SciTE lub Notepad ++, jeśli nie musisz konwertować wszystkich zakończeń linii we wszystkich plikach, ale po prostu nie chcesz, aby cały plik był zgrupowany w pierwszym wierszu.


Tak powiedzieli, kiedy miałem odwrotny problem podczas przełączania na Linux. Ciągle napotykałem narzędzia, które miały problemy z niewłaściwymi zakończeniami linii. I NIC nie obsługuje rozsądnie zakończeń linii mieszanych.
Matthew Scouten

@ Matthew Wiem, że końcówki wiersza unix / windows poprawnie obsługują scite . Używam go w tym celu w Windows VMS, które uruchamiam w systemie Linux podczas edycji plików w systemie hosta.
nelaaro,

Jestem pewien, że poleceni przez Ciebie redaktorzy będą działać dobrze. ale w pewnym momencie będę musiał podać plik tekstowy do innego narzędzia, a to narzędzie NIE. W tym momencie posiadanie edytora tekstu, który dobrze sobie z tym radzi, pogorszy sytuację, ukrywając problem. i założę się, że nadal źle radzi sobie z mieszanymi zakończeniami (a przynajmniej z dziwactwami).
Matthew Scouten

1
+1 dla opcji notatnika ++ do konwersji zakończeń kłamstw. A oto jak to zrobić dokładniej (patrz „Metoda 2”): staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
WIP

Notepad ++ ma już rozwiązania do konwersji końcówek linii, między innymi kodowania
phuclv

0

Istnieje wiele sposobów tłumaczenia znaków eoln w plikach TEKSTOWYCH, a każdy ma swoje ulubione.

Ale zawsze przesyłam pliki z systemu Linux do systemu Windows w trybie BINARNYM, a następnie otwieram pliki TEXT w systemie Windows za pomocą edytora zdolnego do otwierania obu typów i zapisywania ich w dowolnej formie, jeśli to konieczne.

Użyłem do tego Edytora plików Programmers, ale Notepad ++ też to potrafi. Program WordPad jest także przydatny [przynajmniej do przeglądania plików zakończonych LF].

Mam na myśli proste pliki tekstowe, które mogły powstać w systemie Linux i muszą być czytelne w świecie Windows (standard defacto). Nie jestem pewien, co miałeś na myśli przez „pliki z uniksowymi plikami”.


Problem z tą metodą polega na tym, że robi ona tylko jeden plik na raz.
Matthew Scouten

„pliki dotknięte unixem” to moje słowo zarówno dla plików LF, jak i mieszanych CRLF-LF. Po edycji pliku w narzędziach unix-oid ma tendencję do „infekcji” liniami tylko LF.
Matthew Scouten

2
Tak naprawdę mówiłem, że wybierając odpowiednie oprogramowanie do przeglądania plików tekstowych, wcale nie trzeba ich konwertować. BTW, unikałem zabrania cię do zadania opisywania plików zakończonych CRLF jako „poprawnych”. To zależy całkowicie od twojego punktu widzenia. Każda metoda jest właściwa we własnym systemie operacyjnym. Gdy plik zostanie przeniesiony do innego systemu operacyjnego, okaże się, że Win / Mac / Linux są różne. Podejrzewam, że metoda Unix / Linux jest oryginalna.
pavium,

3
Podejrzewasz źle. Standard ASCII został pierwotnie opracowany dla maszyn teletypowych i wymagał CRLF. Większość protokołów internetowych (w tym HTTP, SMTP, FTP, IRC i wiele innych) również wymaga zakończeń CRLF (większość implementacji akceptuje czysty LF dla kompatybilności z niezgodnymi programami Unix). W tym przypadku Windows postępuje zgodnie ze standardem, a Unix i Mac go łamią.
Matthew Scouten

0

Aby zaoferować więcej opcji (chociaż najbardziej podobała mi się odpowiedź hacka użytkownika user45832 ):

Konwertery online

Myślę, że program FTP z GUI zrobi to automatycznie

Jednowarstwowy pakiet / DOS (usuwa puste linie) :

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

PowerShell:

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

Mam dwa ostatnie stąd


0

Uzyskaj AWK dla Windows .

Konwertuj zakończenia linii uniksowych na zakończenia linii Windows:

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

Konwertuj zakończenia linii Windows na zakończenia linii Uniksa:

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

Starsze wersje awknie zawierają tej subfunkcji. W takich przypadkach należy użyć tej samej komendy, ale zastąpić awkz gawklub nawk.

Źródło


0

W Wikipedii jest rozwiązanie w cmd:

TYPE unix_file | FIND /V "" > dos_file

W PowerShell można to zrobić na różne sposoby, odwracając czynności wykonane w tym pytaniu .

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

Można to również zrobić w VBScript i JScript, które są również narzędziami, które są już dostępne w systemie Windows bez instalowania aplikacji innej firmy.


0

Moja dystrybucja Linuksa ma dwa małe narzędzia zwane fromdosi todosktórych używam do tego zadania.


OP prosi o narzędzie Windows
phuclv

-2

Kiedyś otwierałem plik w 'edytuj' i zapisywałem po zakończeniu pracy ...


co to jest „edycja”? nie ma takiego narzędzia w Windows 10
phuclv


oczywiście korzystałem editz DOS, ale to pytanie dotyczy Windowsa
phuclv

1
editkiedyś był częścią systemu Windows do Windows XP. Moja odpowiedź ma około 8 lat. W tym czasie editbył częścią instalacji systemu Windows w wielu przypadkach ...
Radek
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.