Convertir les fins de ligne Unix en Windows


38

Je suis récemment revenu à Windows sous Linux. J'ai des fichiers avec des CRLF, certains avec des LF et d'autres mixtes. Existe-t-il un utilitaire qui m'aidera à retrouver tous mes fichiers touchés par Unix et à les convertir en fichiers terminés par CRLF appropriés?

L'utilitaire doit s'exécuter sous Windows, pas sous Linux. J'ai déjà déménagé. Je préférerais ne pas installer Cygwin si je peux l'éviter.


1
connexes: voir superuser.com/questions/38744 superuser.com/questions/27060 superuser.com/questions/52044 ... n'importe quel outil mentionné dans ceux-ci peut être inversé pour accomplir ce que vous voulez faire
Quack Quichotte

Dupliquer la question
ukanth

Les solutions de ces questions dites en double s'exécutent toutes sur des plates-formes linux ou préforment la conversion opposée. Je n'ai plus Linux. J'ai des fenêtres.
Matthew Scouten

1
ils sont tous disponibles pour Windows via Cygwin, GnuWin32, UnxUtils ou autres. Je pense qu'il existe des scripts Powershell qui peuvent le faire également, bien que je n'en sache pas assez pour fournir des liens.
Quack Quackote

1
@quack: la question indique spécifiquement que l'utilisateur recherche quelque chose qui fera le travail sous Windows, à l'aide d'un utilitaire Windows.
Brian Lacy

Réponses:


34

Vous pouvez les convertir avec l' unix2dosutilitaire sur votre plate-forme Linux. Il existe également des unix2dos versions disponibles pour Windows .

Si vous avez installé Perl, vous pouvez également utiliser ce liner:

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

J'ai fait quelque chose de similaire à cela, mais j'ai utilisé python.
Matthew Scouten

2
@ Matthew Scouten: alors ... vous avez trouvé un utilitaire Unix qui tourne sous Windows! félicitations!
Quack Quichotte

8
Oui et non. J'ai écrit mon propre utilitaire blasted. J'aurais pu le faire dès le début, mais j'espérais économiser 30 minutes. Malheureusement, je n’étais pas satisfait des services disponibles. Le plus proche que j'ai trouvé corrompu tous les fichiers binaires dans le répertoire.
Matthew Scouten

La conversion avec dos2unix et unix2dos pose des problèmes. Si le fichier contient des fichiers CRLF et LF mélangés, il se peut que certaines occurrences ne soient pas remplacées.
Petits

17

Voici un moyen facile et rapide.

Faites glisser le fichier texte dans Chrome (je ne connais pas les autres navigateurs), puis coupez-le et collez-le dans le fichier d'origine :)


2
hehe ... cette réponse m'a fait lol
ClintM

tous les navigateurs peuvent lire très bien les fins de ligne Unix, y compris IE. Mais même dans ce cas, wordpad peut également le faire, tout comme le bloc-notes moderne . Ce qui est important ici, c'est comment convertir plusieurs fichiers automatiquement
phuclv

10

Celui que j’ai trouvé le mieux pour parcourir récursivement les dossiers, autoriser les filtres de fichiers, permettre une simple recherche de "\ r \ n" et le remplacer par un simple "\ n" était Notepad ++ .

Notepad ++ est l’un des meilleurs programmes de bloc-notes open source gratuits pour Windows. C'est très simple et puissant. Il a très bien géré la fin de la ligne de recherche / remplacement. Un entrepreneur a archivé plusieurs fichiers .c et .h dans notre référentiel avec les fins de ligne Linux, mais comme la plupart des utilisateurs ont normalisé les outils de génération Windows / Eclipse, ils ne seront pas générés tant que les fins de ligne ne seront pas converties. .


8
Je pense que vous avez inversé les fins ici: linux est \ n, windows est \ r \ n
Matthew Scouten le

10
Notepad ++ propose également un Edit -> EOL Conversionmenu simple si le nombre de fichiers à convertir est faible.
user1071136

8

Utilisez le couteau de fichier suisse .

Par exemple: sfk addcr -dir . -file .txt -norec
change les extrémités de LF en CR / LF pour Windows, sur tous les fichiers .txt du répertoire en cours, mais PAS dans les sous-répertoires (pas de récursivité).

Mais ce programme fait beaucoup plus que cela.


Je ne spécifie pas -norecparce que je veux que la récursion se produise, mais cela ne semble pas être le cas
Csaba Toth

6

Sur Cygwin, vous pouvez convertir des fichiers AKA Windows sous Unix et "DOS" à l'aide de deux utilitaires intégrés:

Convertir au format DOS CR / LF:

u2d filename

Reconvertir au format Unix CR:

d2u filename

Le fichier est laissé en place avec le même nom.

Prendre plaisir! Meule


Ceci est parfois appelé dos2unixou unix2dosau cas où vous ne le trouverez pas en tant que u2d ou d2u. Il y a aussiunix2mac
gtatr

3

Je vais jeter cette solution là-bas. Git va le faire. Voir ce post à ce sujet

Donc, théoriquement, vous pouvez le faire pour convertir un arbre entier

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

Changer crlfen lfsi vous voulez aller dans l'autre sens. NOTE: vous n'avez pas encore fini, continuez à lire

Tapez git statuspour voir quels fichiers seront affectés. Vous devrez peut-être ajouter des lignes comme

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

etc pour .gitattributeséviter de convertir certains fichiers. Vous pouvez également marquer explicitement certains fichiers en tant que texte

*.md text
*.css text

Ensuite, il suffit de répéter ces 2 lignes après avoir édité .gitattributes

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

Puis utilisez à git statusnouveau pour voir quels fichiers seront modifiés. Quand vous êtes sûr que tous les fichiers que vous voulez affecter sont listés par git statuspuis commit

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

maintenant vérifier tous les fichiers à nouveau

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

Ils devraient maintenant avoir quelle que soit la fin de votre ligne souhaitée

** NOTE: Si vous utilisiez déjà git, ignorez les 3 premières commandes git. Si vous n'utilisiez pas git, vous pouvez maintenant supprimer le .gitattributesfichier et le .gitdossier.

** Sauvegardez vos fichiers: ils les git rm --cached -rsuppriment tous (bien qu’ils soient théoriquement dans votre dépôt git (le dossier .git), c’est comment ils sont restaurés par la dernière commande git reset --hard. C’est juste parce que les fichiers sont supprimés qu’il est probablement préférable de les sauvegarder. up.


1

Utilisez un éditeur de texte qui comprend les deux fins de ligne, comme SciTE ou Notepad ++, si vous n'avez pas besoin de convertir toutes les lignes se terminant dans tous vos fichiers, mais que vous ne voulez simplement pas voir le fichier entier groupé sur la première ligne.


C'est ce qu'ils ont dit quand j'ai eu le problème inverse en passant à Linux. J'ai continué à utiliser des outils qui rencontraient des problèmes avec les mauvaises fins de ligne. Et RIEN ne gère raisonnablement les fins de lignes mixtes.
Matthew Scouten

@ Matthew Je sais que les scites gèrent correctement les fins de ligne Unix / Windows . Je l'utilise à cette fin dans Windows vms que je lance sous Linux lors de l'édition de fichiers sur le système hôte.
Nelaaro le

Je suis sûr que les éditeurs que vous recommandez fonctionneront très bien. mais à un moment donné, j'aurai besoin d'alimenter le fichier texte avec un autre outil, et cet outil NE le fera PAS. À ce stade, disposer d'un éditeur de texte qui gère bien les choses aggravera la situation en masquant le problème. et je parierai qu'il gère toujours mal les fins mixtes (ou du moins avec des bizarreries).
Matthew Scouten le

1
+1 pour le bloc-notes ++ option pour convertir les fins de mensonge. Et voici comment procéder plus spécifiquement (voir "méthode 2"): staffwww.fullcoll.edu/brippe/csci123/saveAsUnix.aspx
wip

Notepad ++ a déjà les solutions pour convertir les fins de ligne, les encodages entre autres
phuclv

0

Il existe de nombreuses façons de traduire les caractères eoln dans des fichiers TEXT, et tout le monde a son favori.

Mais je transfère toujours les fichiers de Linux vers Windows en mode BINARY, puis j’ouvre les fichiers TEXT dans Windows avec un éditeur capable d’ouvrir les deux types, et je les enregistre si nécessaire.

J'ai utilisé l'éditeur de fichiers de programmation pour cela, mais Notepad ++ peut le faire aussi. WordPad est également utile [au moins pour visualiser les fichiers terminés par LF].

Je pense aux simples fichiers texte qui peuvent provenir de Linux et doivent être lisibles dans le monde (standard) de Windows. Je ne suis pas sûr de ce que vous entendiez par «fichiers touchés par Unix».


Le problème avec cette méthode est qu’elle ne traite qu’un fichier à la fois.
Matthew Scouten

«Unix fichiers touchés» est mon mot pour les fichiers CRLF-LF LF-seulement et mixtes. Une fois qu'un fichier a été édité dans les outils unix-oid, il a tendance à être "infecté" par des lignes contenant uniquement la grille.
Matthew Scouten

2
Ce que je disais en réalité, c’est qu’en choisissant le bon logiciel de visualisation des fichiers texte, ils ne doivent pas du tout être convertis. BTW, j'ai évité de vous prendre pour tâche de décrire les fichiers terminés CRLF comme «appropriés». Cela dépend entièrement de votre point de vue. Chaque méthode est propre à son propre système d'exploitation. Lorsqu'un fichier est déplacé vers un autre système d'exploitation, nous constatons que Win / Mac / Linux sont tous différents. Je soupçonne que la méthode Unix / Linux est la méthode originale.
Pavium

3
Vous pensez que vous avez tort. La norme ASCII a été développée à l’origine pour les machines de télétype et le CRLF obligatoire. La plupart des protocoles Internet (y compris HTTP, SMTP, FTP, IRC et de nombreux autres) requièrent également les terminaisons CRLF (la plupart des implémentations acceptent LF nu pour la compatibilité avec des programmes Unix non conformes). Dans ce cas, Windows suit la norme et Unix et Mac la cassent.
Matthew Scouten

0

Pour offrir plus d'options (même si j'ai le plus apprécié la réponse de hack de user45832 ):

Convertisseurs en ligne

Je suppose qu'un programme FTP à interface graphique le fera automatiquement

Batch / DOS one-liner (supprime les lignes vides) :

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

Powershell:

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

J'ai les deux derniers d'ici


0

Obtenez AWK pour Windows .

Convertissez les fins de ligne Unix en fins de ligne Windows:

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

Convertissez les fins de ligne Windows en fins de ligne Unix:

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

Les anciennes versions de awkn'incluent pas la subfonction. Dans ce cas, utilisez la même commande, mais remplacez awkpar gawkou nawk.

La source


0

Sur Wikipedia, il y a une solution dans cmd:

TYPE unix_file | FIND /V "" > dos_file

Dans PowerShell, il existe différentes façons de le faire en inversant ce qui a été fait dans cette question .

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

Cela est également possible dans VBScript et JScript, qui sont également des outils déjà disponibles dans Windows sans installer une application tierce.


0

Ma distribution Linux a deux petits utilitaires appelés fromdoset todosque j'utilise pour cette tâche.


L'OP demande un outil Windows
phuclv

-2

J'avais l'habitude d'ouvrir le fichier dans 'edit' et de l'enregistrer en tant que travail terminé ...


qu'est-ce que "edit"? il n'y a pas un tel outil dans windows 10
phuclv


évidemment, je l'ai utilisé editsous DOS mais cette question concerne Windows
phuclv

1
editfaisait partie de Windows jusqu’à Windows XP. Ma réponse est d'environ 8 ans. Dans ce temps editfaisait partie de l'installation de Windows dans de nombreux cas ...
Radek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.