Конвертировать окончания строк Unix в Windows

53167
Matthew Scouten

Я недавно вернулся в Windows из Linux. У меня есть некоторые файлы с CRLF, некоторые с LF, а некоторые смешанные. Есть ли утилита, которая поможет мне найти все мои файлы, затронутые Unix, и преобразовать их в правильные файлы с расширением CRLF?

Утилита должна работать на Windows, а не на Linux. Я уже переехал. Я бы предпочел не устанавливать Cygwin, если я могу избежать этого.

35
связанные: см. http://superuser.com/questions/38744 http://superuser.com/questions/27060 http://superuser.com/questions/52044 ... любой инструмент, упомянутый в них, может быть изменен, чтобы выполнить то, что ты хочешь сделать quack quixote 14 лет назад 1
Повторяющийся вопрос ukanth 14 лет назад 0
Решения в этих так называемых повторяющихся вопросах все работают на платформах Linux или выполняют обратное преобразование. У меня больше нет Linux. У меня есть окна. Matthew Scouten 14 лет назад 0
все они доступны для Windows через Cygwin, GnuWin32, UnxUtils или тому подобное. Я полагаю, что есть сценарии Powershell, которые также могут это делать, хотя я не знаю достаточно об этом, чтобы предоставить какие-либо ссылки. quack quixote 14 лет назад 1
@quack: В вопросе конкретно говорится, что пользователь ищет что-то, что будет выполнять работу в Windows, используя утилиту Windows. Brian Lacy 13 лет назад 1
дубликаты: [Команда Windows для преобразования концов строк Unix?] (http://stackoverflow.com/q/17579553/995714), [Способ преобразования CR в CRLF в текстовом файле для всех строк с использованием CMD] (http: / /stackoverflow.com/q/19912941/995714) phuclv 7 лет назад 0

13 ответов на вопрос

31
John T

Вы можете конвертировать их с помощью unix2dosутилиты на вашей платформе Linux. Также доступны unix2dos версии для Windows .

Если у вас установлен Perl, вы также можете использовать этот вкладыш:

perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt 
Я сделал что-то похожее на это, но я использовал Python. Matthew Scouten 14 лет назад 0
@ Matthew Scouten: итак ... вы нашли утилиту Unix, которая работает на Windows! Поздравляю! quack quixote 14 лет назад 2
и да и нет. Я написал свою проклятую утилиту. Я мог бы сделать это с самого начала, но я надеялся сэкономить 30 минут. К сожалению, я не был доволен доступными утилитами. Ближайшие найденные мной поврежденные двоичные файлы в каталоге. Matthew Scouten 14 лет назад 8
Есть проблемы с преобразованием с dos2unix и unix2dos - если файл имеет смешанные CRLF и LF, могут быть некоторые случаи, которые не будут заменены. pbies 6 лет назад 0
17
user45832

Вот простой и быстрый способ.

Перетащите текстовый файл в Chrome (я не знаю о других браузерах), а затем обрежьте и вставьте обратно в исходный файл :)

хе-хе ... этот ответ заставил меня смеяться ClintM 7 лет назад 1
все браузеры могут читать окончания строк Unix просто отлично, включая IE. Но даже тогда WordPad также может это сделать, как и [современный Блокнот] (https://blogs.msdn.microsoft.com/commandline/2018/05/08/extended-eol-in-notepad/). Здесь важно, как автоматически конвертировать несколько файлов phuclv 6 лет назад 0
10
Matt

Тот, который я нашел лучше всего для рекурсивного обхода папок, разрешения файловых фильтров и простого поиска "\ r \ n" и замены его просто "\ n", был Notepad ++ .

Notepad ++ - одна из лучших бесплатных программ с открытым исходным кодом для Windows. Это очень просто и мощно. Он отлично справился с поиском / заменой окончания строки. Подрядчик проверяет кучу файлов .c и .h в нашем репозитории с окончаниями строк Linux \ r \ n, но, поскольку большинство людей стандартизировали средства сборки Windows / Eclipse, файлы не будут собираться до тех пор, пока не будут преобразованы окончания строк ,

Я думаю, что вы изменили окончание там: Linux - это \ n, Windows - это \ r \ n Matthew Scouten 13 лет назад 8
Notepad ++ также имеет простое меню `Edit -> EOL Conversion`, если количество конвертируемых файлов невелико. user1071136 12 лет назад 10
8
harrymc

Используйте швейцарский файл-нож .

Например: sfk addcr -dir . -file .txt -norec
изменяет окончания LF на CR / LF для Windows во всех файлах .txt текущего каталога, но НЕ в подкаталогах (без рекурсии).

Но эта программа делает намного больше, чем просто это.

Я не указываю `-norec`, потому что я хочу, чтобы рекурсия происходила, но это не похоже на это Csaba Toth 7 лет назад 0
6
Rick V

На Cygwin вы можете конвертировать файлы Unix и "DOS" AKA Windows, используя две встроенные утилиты:

Преобразовать в формат DOS CR / LF:

u2d filename 

Конвертировать обратно в формат Unix CR:

d2u filename 

Файл остается на месте с тем же именем.

Наслаждайтесь! стог

Иногда это называется «dos2unix» или «unix2dos», если вы не можете найти его как u2d или d2u. Также есть `unix2mac` gtatr 6 лет назад 0
3
gman

Я собираюсь выбросить это решение там. 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, пропустите первые 3 команды git. Если вы не использовали git, теперь вы можете удалить .gitattributesфайл и .gitпапку.

** Создайте резервные копии ваших файлов: git rm --cached -rвсе они удаляются (хотя они теоретически находятся в вашем git-репо (папке .git) - так они и восстанавливаются последней командой git reset --hard. Просто, поскольку файлы удаляются, вероятно, лучше всего их поддержать вверх.

1
geek

В моем дистрибутиве Linux есть две маленькие утилиты, называемые fromdos и todos, которые я использую для этой задачи.

ОП просит * инструмент Windows * phuclv 6 лет назад 0
1
nelaaro

Используйте текстовый редактор, который понимает оба конца строк, например SciTE или Notepad ++, если вам не нужно преобразовывать все окончания строк во всех ваших файлах, но просто не хотите видеть весь файл, сгруппированный в первой строке.

Это то, что они сказали, когда у меня возникла обратная проблема при переходе на Linux. Я продолжал работать с инструментами, у которых были проблемы с неправильными окончаниями строк. И НИЧЕГО не обрабатывает смешанные окончания строк. Matthew Scouten 13 лет назад 0
@ Mattw Я знаю, что scite правильно обрабатывает окончания строк [unix / windows] (http://www.scintilla.org/ScintillaDoc.html#LineEndings). Я использую его для этой цели в Windows vms, которую я запускаю в Linux, при редактировании файлов в хост-системе. nelaaro 13 лет назад 0
Я уверен, что редакторы, которые вы рекомендуете, будут работать просто отлично. но в какой-то момент мне нужно будет передать текстовый файл другому инструменту, и этот инструмент НЕ будет. На этом этапе наличие текстового редактора, который хорошо справляется с ситуацией, ухудшит ситуацию, скрыв проблему. и держу пари, что он по-прежнему плохо справляется со смешанными окончаниями (или, по крайней мере, со странностями). Matthew Scouten 13 лет назад 0
+1 для опции notepad ++ для преобразования концов лжи. А вот как это сделать более конкретно (см. «Метод 2»): http://staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx wil 12 лет назад 1
Notepad ++ уже имеет решения для преобразования концов строк, кодировок и прочего phuclv 7 лет назад 0
0
pavium

Есть много способов перевести символы eoln в текстовые файлы, и у каждого есть любимый.

Но я всегда передаю файлы из Linux в Windows в режиме BINARY, затем открываю файлы TEXT в Windows с помощью редактора, который может открывать оба типа и сохранять их в любой форме, если это необходимо.

Я использовал Редактор файлов для программистов, но Notepad ++ тоже может это сделать. WordPad также полезен [по крайней мере, для просмотра LF-файлов с завершением].

Я имею в виду простые текстовые файлы, которые могли появиться в Linux и должны быть читаемы в мире стандартов (по умолчанию). Я не уверен, что вы имели в виду под «unix-touch-файлами».

Проблема этого метода в том, что он делает только один файл за раз. Matthew Scouten 14 лет назад 0
«unix-touch-файлы» - мое слово как для LF-файлов, так и для смешанных CRLF-LF. После того, как файл был отредактирован в инструментах unix-oid, он имеет тенденцию «заражаться» строками только для LF. Matthew Scouten 14 лет назад 0
Что я действительно говорил, так это то, что, выбирая правильное программное обеспечение для просмотра текстовых файлов, их вообще не нужно конвертировать. Кстати, я избежал вас к задаче для описания файлов, завершенных CRLF, как «правильных». Это полностью зависит от вашей точки зрения. Каждый метод соответствует своей ОС. Когда файл перемещается в другую ОС, мы обнаруживаем, что Win / Mac / Linux все разные. Я подозреваю, что метод Unix / Linux является оригинальным. pavium 14 лет назад 2
Вы подозреваете, что это неправильно. Стандарт ASCII был первоначально разработан для телетайпов и получил мандат CRLF. Большинству интернет-протоколов (включая HTTP, SMTP, FTP, IRC и многие другие) также требуются окончания CRLF (большинство реализаций принимают голый LF для совместимости с несовместимыми программами Unix). В этом случае Windows следует стандарту, а Unix и Mac его нарушают. Matthew Scouten 14 лет назад 3
0
gregg

To offer more options (even though I best enjoyed user45832's hack answer):

Online convertors

I guess a GUI FTP program will do it automatically

Batch/DOS one-liner (removes empty lines):

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

Powershell:

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

Got the last two from here