37

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

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

13 ответов13

32

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

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

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

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

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

10

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

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

8

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

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

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

6

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

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

u2d filename

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

d2u filename

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

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

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 то commit

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 repo (папка .git), как они восстанавливаются последней командой git reset --hard . Просто, поскольку файлы удаляются, вероятно, лучше всего их резервировать.

1

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

1

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

0

Получить AWK для Windows.

Преобразование концов строки Unix в окончания строк Windows:

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

Преобразовать окончания строк Windows в окончания строк Unix:

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

Более старые версии awk не включают функцию sub . В таких случаях используйте ту же команду, но замените awk на gawk или nawk .

Источник

0

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

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

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

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

0

В Википедии есть решение в 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, без установки стороннего приложения.

0

Чтобы предложить больше вариантов (хотя мне больше всего понравился взломанный ответ user45832):

Интернет конвертеры

Я предполагаю, что программа FTP GUI сделает это автоматически

Пакетная /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

Получил последние два отсюда

-2

Я использовал, чтобы открыть файл в «редактировать» и сохранить как то, что работа была выполнена ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .