dos2unix to mały, ale niezastąpiony konwerter, który zamienia windowsowe zakończenia linii (CRLF, czyli \r\n) na uniksowe (LF, czyli \n). Przydaje się zawsze, gdy plik napisany w Notatniku albo edytorze na Windows ląduje na Linuksie i nagle skrypt wywala bad interpreter: No such file or directory, a w git diff widzisz tajemnicze ^M na końcu każdej linii. Domyślnie dos2unix działa w trybie in-place, czyli konwertuje plik w miejscu i nadpisuje oryginał. Towarzyszy mu bliźniak unix2dos robiący to samo w drugą stronę.
Składnia i najważniejsze opcje
Podstawowe wywołanie jest banalne: dos2unix [opcje] plik...
-k(--keepdate) — zachowuje datę modyfikacji pliku (domyślnie po konwersji data się zmienia).-n in out(--newfile) — tryb nowego pliku: czytain, zapisuje wynik doout, oryginał zostaje nietknięty.-o(--oldfile) — tryb starego pliku, czyli konwersja w miejscu. To zachowanie domyślne, ale flagę można podać jawnie.-i(--info) — nic nie konwertuje, tylko pokazuje statystyki: ile linii ma CRLF, ile LF, czy jest BOM, czy plik jest binarny.-c convmode(--convmode) — tryb konwersji znaków:ascii(domyślny),7bit,isolubmac.--safe— nie przerywa konwersji, gdy nie da się zachować właściciela/grupy pliku.-b(--keep-bom) — zachowuje znacznik BOM, jeśli plik wejściowy go miał.
Przykłady użycia
dos2unix skrypt.sh— konwertuje plik w miejscu; najczęstszy ratunek dla skryptu z CRLF.dos2unix -k config.ini— konwersja z zachowaniem oryginalnej daty modyfikacji.dos2unix -n plik.txt plik_unix.txt— tworzy nową wersję uniksową, oryginał zostawia w spokoju.dos2unix -i *.txt— sprawdza, które pliki w katalogu mają jeszcze windowsowe końcówki, zanim cokolwiek ruszysz.find . -name "*.sh" -exec dos2unix {} +— masowa konwersja wszystkich skryptów w drzewie katalogów.
Częste błędy i pułapki
Najpopularniejsza pułapka: dos2unix domyślnie nadpisuje plik, więc na danych produkcyjnych warto najpierw zrobić kopię albo użyć -n. Druga sprawa — narzędzie nie zawsze jest preinstalowane (na minimalnych obrazach Dockera czy świeżym serwerze trzeba doinstalować pakiet dos2unix). Nie odpalaj go też na plikach binarnych: domyślnie pomija takie, które wykryje jako binarne, ale wymuszenie konwersji potrafi je uszkodzić. Pamiętaj również, że to konwerter końców linii, a nie kodowania znaków — od UTF-8 vs latin1 są tryby -c iso/-c 7bit, ale to inny problem niż samo CRLF.
Powiązane komendy: unix2dos, sed, tr, file, iconv.