web-dev-qa-db-fra.com

Convertir les finitions de ligne Unix en Windows

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.

37
Matthew Scouten

Vous pouvez les convertir avec l'utilitaire unix2dos sur votre plate-forme Linux. Il existe également des versions unix2dosdisponibles 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
32
John T

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

17
user45832

Celui que j’ai trouvé le plus approprié 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. .

10
Matt

Utilisez le couteau de lime suisse .

Par exemple: sfk addcr -dir . -file .txt -norec
modifie LF fins 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.

8
harrymc

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

6
Rick V

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

Changez crlf en lf si vous voulez aller dans l'autre sens. NOTE: vous n'avez pas encore fini, continuez à lire

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

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

etc en .gitattributes pour é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

Ensuite, utilisez à nouveau git status pour voir quels fichiers seront modifiés. Lorsque vous êtes sûr que tous les fichiers que vous souhaitez affecter sont répertoriés par git status, puis validez

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 fichier .gitattributes et le dossier .git.

** Sauvegardez vos fichiers: le git rm --cached -r les supprime tous (bien qu’ils soient théoriquement dans votre référentiel 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 vaut probablement mieux sauvegardez-les.

3
gman

Ma distribution Linux a deux petits utilitaires appelés fromdos et todos que j'utilise pour cette tâche.

1
geek

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 par tous vos fichiers, mais que vous ne voulez tout simplement pas voir le fichier entier groupé sur la première ligne.

1
nelaaro

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 versions antérieures de awk n'incluent pas la fonction sub. Dans ce cas, utilisez la même commande, mais remplacez awk par gawk ou nawk.

Source

0
Neeme Praks

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 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 LF fichiers terminés].

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".

0
pavium

Sur Wikipedia , il existe 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)

Il est également possible de faire cela dans VBScript et JScript qui sont aussi des outils. qui sont déjà disponibles dans Windows sans avoir à installer une application tierce.

0
phuclv

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

Convertisseurs en ligne

Je suppose qu'un programme FTP d'interface utilisateur graphiquele 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

Vous avez les deux derniers à partir d'ici

0
gregg