dos2unix

Konwertuje zakończenia linii z formatu Windows (CRLF) na uniksowy (LF).

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: czyta in, zapisuje wynik do out, 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, iso lub mac.
  • --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.