it-swarm-eu.dev

Converti terminazioni di linea Unix in Windows

Recentemente sono tornato a Windows da Linux. Ho alcuni file con CRLF, alcuni con LF e alcuni che sono misti. C'è un'utilità che mi aiuterà a trovare tutti i miei file toccati da Unix e convertirli in file terminati CRLF appropriati?

L'utilità deve essere eseguita su Windows, non su Linux. Mi sono già trasferito. Preferirei non installare Cygwin se posso evitarlo.

37
Matthew Scouten

Puoi convertirli con l'utility unix2dos sulla tua piattaforma Linux. Ci sono anche versioni unix2dosdisponibili per Windows .

Se hai installato Perl, puoi utilizzare anche questo liner:

Perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
32
John T

Ecco un modo facile e veloce.

Trascina e rilascia il file di testo in Chrome (non so altri browser) e poi taglia e incolla nuovamente nel file originale :)

17
user45832

Quello che ho trovato migliore per ricorsivamente passare attraverso le cartelle, consentendo i filtri di file e consentendo una semplice ricerca di "\ r\n" e sostituendolo con solo "\ n" era Notepad ++ .

Notepad ++ è uno dei migliori programmi di blocco note gratuiti, open source per Windows. È molto semplice e potente. Ha gestito la linea che termina la ricerca/sostituisce perfettamente. Un appaltatore controlla un certo numero di file .c e .h nel nostro repository con terminazioni di riga di Linux, ma poiché la maggior parte delle persone si è standardizzata sugli strumenti di compilazione di Windows/Eclipse, i file non verranno creati fino a quando le terminazioni di riga non saranno convertite .

10
Matt

Usa il Swiss File Knife .

Ad esempio: sfk addcr -dir . -file .txt -norec
modifica LF finali in CR/LF per Windows, su tutti i file .txt della directory corrente, ma NON nelle sottodirectory (nessuna ricorsione).

Ma questo programma fa molto di più di questo.

8
harrymc

Su Cygwin, è possibile convertire tra Unix e file Windows "DOS" AKA utilizzando due utilità incorporate:

Converti in formato DOS CR/LF:

u2d filename

Converti nuovamente in formato Unix CR:

d2u filename

Il file viene lasciato sul posto con lo stesso nome.

Godere! pagliaio

6
Rick V

Ho intenzione di lanciare questa soluzione là fuori. Git farà questo. Vedi questo post su di esso

Quindi, teoricamente, potresti farlo per convertire un intero albero

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

Cambia crlf in lf se vuoi andare dall'altra parte. NOTA: non hai ancora finito, continua a leggere

Digita git status per vedere quali file saranno interessati. Potrebbe essere necessario aggiungere linee come

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

ecc per .gitattributes per evitare la conversione di determinati file. È anche possibile contrassegnare esplicitamente determinati file come testo

*.md text
*.css text

Quindi ripeti queste 2 righe dopo aver modificato .gitattributes

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

Quindi usa di nuovo git status per vedere quali file verranno modificati. Quando sei sicuro che tutti i file che vuoi influenzati sono elencati da git status, allora fai il commit

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

ora controlla di nuovo tutti i file

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

Ora dovrebbero avere qualunque cosa siano i finali di linea desiderati

** NOTA: se stavi già usando git, salta i primi 3 comandi di git. Se non stavi usando git ora puoi cancellare il file .gitattributes e la cartella .git.

** Esegui il backup dei tuoi file: il git rm --cached -r li cancella tutti (anche se sono teoricamente nel tuo repository git (la cartella .git) che è il modo in cui vengono ripristinati dall'ultimo comando git reset --hard. È solo perché i file vengono eliminati probabilmente è meglio sostenili.

3
gman

La mia distribuzione Linux ha due piccole utility chiamate fromdos e todos che io uso per questo compito.

1
geek

Usa un editor di testo che comprende entrambe le terminazioni di riga come SciTE o Notepad ++ se non è necessario convertire tutte le righe che terminano in tutti i file, ma semplicemente non si vuole vedere l'intero file raggruppato sulla prima riga.

1
nelaaro

Ottieni AWK per Windows .

Converti terminazioni di linea Unix in terminazioni di linea Windows:

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

Converti le terminazioni di linea Windows in terminazioni di linea Unix:

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

Le versioni precedenti di awk non includono la funzione sub. In questi casi, utilizzare lo stesso comando, ma sostituire awk con gawk o nawk.

Fonte

0
Neeme Praks

Esistono molti modi per tradurre i caratteri di eoln nei file TEXT e ognuno ha un preferito.

Ma trasferisco sempre i file da Linux a Windows in modalità BINARY, quindi apro i file TEXT in Windows con un editor in grado di aprire entrambi i tipi e di salvarli in qualsiasi forma, se necessario.

Ho usato Programmers File Editor per questo, ma Notepad ++ può farlo anche io. WordPad è anche utile [almeno, per visualizzazione LF file terminati].

Sto pensando ai semplici file di testo che potrebbero aver avuto origine su Linux e devono essere leggibili nel mondo (defacto standard) di Windows. Non sono sicuro di cosa intendessi per "file unix-touched".

0
pavium

Su Wikipedia c'è una soluzione in cmd:

TYPE unix_file | FIND /V "" > dos_file

In PowerShell ci sono vari modi per farlo invertendo ciò che è stato fatto in questa domanda .

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

È anche possibile farlo in VBScript e JScript che sono anche strumenti che sono già disponibili in Windows senza installare un'applicazione di terze parti.

0
phuclv

Per offrire più opzioni (anche se mi è piaciuta la risposta di hacking di user45832 ):

Convertitori online

Immagino che un programma FTP della GUIlo faccia automaticamente

Batch/DOS one-liner (rimuove le righe vuote) :

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

PowerShell:

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

Ho ottenuto gli ultimi due da qui

0
gregg