45 votes

Convertir les fins de lignes Unix en Windows

Je suis récemment revenu à Windows depuis Linux. J'ai quelques fichiers avec des CRLFs, quelques-uns avec des LFs et d'autres qui sont mélangés. Existe-t-il un utilitaire qui m'aidera à trouver tous mes fichiers modifiés par Unix et à les convertir en fichiers avec des CRLF terminés correctement?

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

5voto

lucian303 Points 132

Je vais jeter cette solution là. Git le fera. Voir cet article à ce sujet

Théoriquement, vous pourriez faire ceci pour convertir un arbre entier

cd répertoire/de/l'arbre
git init .
git add .
git commit -m "commit initial"
echo "* text eol=crlf" > .gitattributes
git rm --cached -r .
git reset --hard

Changez crlf en lf si vous voulez faire l'inverse. NOTE : vous n'avez pas encore terminé, continuez à lire

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

*.jpg binaire
*.png binaire
*.gif binaire

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

*.md texte
*.css texte

Ensuite, répétez ces 2 lignes après avoir modifié .gitattributes

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

Utilisez ensuite git status de nouveau pour voir quels fichiers seront modifiés. Lorsque vous êtes sûr que tous les fichiers que vous souhaitez affecter sont listés par git status, alors commit

git add .
git commit -m "normalisation des fins de ligne"

vérifiez maintenant tous les fichiers à nouveau

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

Ils auront maintenant les fins de ligne que vous désirez

** NOTE : Si vous utilisiez déjà git, passez les 3 premières commandes git. Si vous n'utilisiez pas git, vous pouvez maintenant supprimer le fichier .gitattributes et le dossier .git.

** Sauvegardez vos fichiers : la commande git rm --cached -r les supprime tous (bien qu'ils soient théoriquement dans votre repo git (le dossier .git) ce qui les restaure avec la dernière commande git reset --hard). C'est juste parce que des fichiers sont supprimés, il est probablement préférable de les sauvegarder.

1voto

nelaaro Points 11661

Utilisez un éditeur de texte qui comprend à la fois les sauts de ligne comme SciTE, ou Notepad++ si vous n'avez pas besoin de convertir tous les sauts de ligne dans tous vos fichiers, mais que vous ne voulez simplement pas voir le fichier entier regroupé sur la première ligne.

1voto

phuclv Points 22397

Sur Wikipedia, il y a une solution dans cmd :

TYPE unix_file | FIND /V "" > dos_file

En PowerShell, il existe plusieurs 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)

Il est également possible de le faire en VBScript et en JScript, qui sont également des outils déjà disponibles dans Windows sans avoir besoin d'installer une application tierce.

0voto

pavium Points 6334

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

Mais je transfère toujours des fichiers de Linux à Windows en mode BINAIRE, puis j'ouvre les fichiers TEXT dans Windows avec un éditeur capable d'ouvrir les deux types, et de les enregistrer dans l'une ou l'autre forme, si nécessaire.

J'utilisais Programmers File Editor 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 ont pu être créés sur Linux, et qui doivent être lisibles dans le monde (de facto) standard de Windows. Je ne suis pas sûr de ce que vous entendiez par 'fichiers touchés par Unix'.

0voto

gregg Points 4675

Pour offrir plus d'options (même si j'ai préféré la réponse piratée de l'utilisateur45832):

Convertisseurs en ligne

Je suppose qu'un programme FTP GUI le fera automatiquement

Une ligne de commande Batch/DOS (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 trouvé les deux derniers ici

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X