- Förstå de olika radbrytningsformaten i textfiler mellan OS hjälper till att undvika inkompatibiliteter.
- dos2unix och unix2dos låter dig säkert konvertera textfiler mellan Windows och Linux/Unix, med flera avancerade alternativ för att anpassa konverteringen efter behov.
- Konverteringsprocessen omfattar inte bara radbrytningar, utan även hantering av kodningar, BOM-taggar och symboliska länkar, vilka alla är viktiga i moderna miljöer.
- Integrera dessa kommandon i skript och automatiseringar underlättar massfilhantering i blandade miljöer och optimerar arbetsflödet mellan datorer och servrar.
Har du någonsin haft att göra med textfiler som inte ser rätt ut när du öppnar dem i din favoritredigerare? Linux eller Windows? Detta beror oftast på skillnader i de tecken som olika operativsystem använder för att markera slutet på varje rad. Om du arbetar i blandade miljöer eller samarbetar med andra som använder olika system har du förmodligen stött på detta lilla problem mer än en gång. Som tur är finns det klassiska kommandon som dos2unix y unix2dos som låter dig enkelt konvertera filer mellan DOS/Windows och Unix/Linux textformat.
I följande artikel går vi igenom allt som rör dos2unix- och unix2dos-kommandon. Vi kommer att gå igenom allt från de mest grundläggande och teoretiska koncepten om radbrytningar och skillnaderna mellan system, till en genomgång av de mest avancerade alternativen för båda programmen, detaljerade exempel på användning, alternativ och Tricks att komma ur eventuella problem. Om du någonsin undrat exakt vad varje parameter gör eller varför en fil ibland verkar skadad när den inte är det, hittar du svaret här. Och vi kommer att göra det med hjälp av lättförståeligt språk och praktiska exempel, så att alla som letar efter en lösning vet hur man tar sig igenom den, men också så att alla som vill fullt ut förstår allt som händer "under huven".
Varför finns dos2unix och unix2dos?
När man arbetar med kompatibilitet mellan operativsystem, en av de mest märkbara (och samtidigt mest irriterande) skillnaderna är hur var och en representerar slutet på en rad i en textfil. En Unix och Linux, slutet av raden anges med tecknet LF (Linjematning, \n), medan i DOS/Windows sekvensen används CRLF (Vagnretur + Radmatning, \ R \ n). För att göra saken mer komplicerad, Mac Äldre (före OSX) modeller används endast CR (\r), även om de idag är anpassade till Unix-formatet.
Vad händer då? Om du redigerar en fil som skapats i Windows i en Linux-textredigerare kommer du ofta att se några irriterande ^M i slutet av varje rad, annars kanske filen inte bearbetas korrekt av vissa program. Omvänt kan det hända att texten ser rörig ut om man öppnar en Linux-fil i klassiska Windows Anteckningar, som om allt vore på en enda rad. Det är här de kommer in i bilden dos2unix y unix2dos (och andra motsvarigheter som t.ex. fråndos, allt, mac2unix o unix2mac), vilket gör att du enkelt kan ändra formatet för radavslutningar från ett system till ett annat.
Hur fungerar dos2unix och unix2dos?
Kärnan i båda kommandona är mycket enkel: konvertera radbrytningar i textfiler mellan DOS/Windows och Unix-format. dos2unix omvandlar vilken rad som helst CRLF (\ R \ n) på bara LF (\n), medan unix2dos gör den omvända processen. Det finns också varianter för konverteringar mellan Mac- och Unix-format. Båda kommandona kan skriva över originalfilen eller spara konverteringen till en ny fil genom att ange den med lämpligt alternativ. Låt oss se hur den grundläggande användningen är:
- Konvertera från DOS/Windows till Unix/Linux:
dos2unix archivo.txt - Konvertera från Unix/Linux till DOS/Windows:
unix2dos archivo.txt - Spara resultatet till en ny fil:
dos2unix -n origen.txt destino.txt
Radbrytningar i operativsystem: en historia av inkompatibiliteter
Detta problem går tillbaka till datoranvändningens tidiga dagar, då varje operativsystem antog olika konventioner. I Unix/Linux radbrytningen har alltid använts LF (\n). DOS/Windows bestämde sig för att använda kombinationen CRLF (\ R \ n), enligt en konvention som ärvts från skrivmaskiner. Klassiskt Mac OS (fram till före Mac OS X) valde CR (\r), även om filer i olika format idag fortfarande genererar inkompatibiliteter.
- Unix/Linux: varje rad avslutas med \n (LF).
- DOS/Windows: Varje rad avslutas med \ R \ n (CRLF).
- Klassisk Mac: Varje rad slutar med \r (CR).
Idag har Mac OS X och dess efterföljare anammat Unix-konventionen med hjälp av LF som ett tecken i slutet av raden. Arvet med filer i blandade format är dock fortfarande en källa till problem, särskilt vid överföring av information mellan plattformar.
Vad gör dos2unix (och unix2dos) egentligen med filer?
Båda kommandona läs filen rad för rad, identifiera radslut enligt källformatet och skriva om filen genom att infoga lämpligt radslutstecken eller teckensekvens för målsystemet. Dessutom, beroende på version och alternativ som används, kan de även hantera aspekter som teckenkodning (t.ex. Unicode), filhantering med byteordningsmarkeringar (BOM), datumbevarande eller filbehörigheter.
Vanliga alternativ och parametrar i dos2unix och unix2dos
Båda kommandona har ett brett utbud av parametrar för att anpassa sin funktion till specifika situationer. Vi listar här de vanligaste och deras användbarhet:
- -n: Låter dig ange in- och utdatafiler. Exempel:
dos2unix -n input.txt output.txt. På så sätt kan du behålla originalfilen. - -k: Håller ändringsdatumet för utdatafilen detsamma som för indatafilen.
- -oUtför konverteringen "på plats", det vill säga skriver över originalfilen med resultatet.
- -fTvingar fram konvertering även på binära filer, även om detta generellt sett inte rekommenderas.
- -cAnger konverteringsläget: ascii (standard), 7bit, iso o mac. Till exempel,
dos2unix -c iso archivo.txt. - -b / –keep-bomBevarar byteordningstecknet (BOM) i Unicode-filer.
- -m / –add-bomLägger explicit till en stycklista i utdatafilen.
- -l / –nyradLägger till en extra tom rad efter varje konverterad radbrytning.
- –allow-chown: Gör att du kan ändra filägaren på vissa system och lägen.
- -h / -hjälpVisar hjälp och avslutar programmet.
- -q / -tystAktivera tyst läge för att inte visa meddelanden på skärmen.
- -v / -MångordigVisar detaljerad information om konverteringen.
Det här är bara några av de tillgängliga alternativen. De flesta moderna versioner av dos2unix/unix2dos De inkluderar många fler, särskilt de som handlar om kodning, symboliska länkar och mönsterbaserad selektiv konvertering.
Avancerad hantering av kodningar och Unicode
En av de mest problematiska aspekterna vid konvertering av textfiler idag har att göra med teckenkodningar. Standarden UTF-8 Det är det mest utbredda i Unix/Linux och rekommenderas för närvarande även i Windows, men det finns många filer i UTF-16, ISO-8859-1, Fönster 1252…De nuvarande versionerna av dos2unix De hanterar de flesta av dessa fall ganska kompetent, även om det finns viktiga nyanser att tänka på:
- Konvertera UTF-16 till UTF-8: dos2unix kommer att försöka omvandla UTF-16-filer till UTF-8 (på Windows) eller till lokal kodning (på Unix/Linux). Om UTF-16-filen saknar en BOM kan den behandlas som binär och inte konverteras.
- BOM-hantering: I Windows är det vanligt att man hanterar Unicode-filer som har en byteordningsmarkering. Dos2unix kan lägga till eller ta bort det beroende på alternativen. -b y -m.
- Specifika kodningar: Med hjälp av parametrar -iso, -1252, -850etc. kan du tvinga fram konvertering mellan specifika teckentabeller, vilket är användbart om du tar emot en fil från en gammal miljö eller en specifik plats.
Det är viktigt att notera att alternativen för kodningskonvertering inte är utformade för att modifiera binära filer, utan bara vanliga textfiler. Att använda dos2unix/unix2dos på binära filer kan orsaka datakorruption.
Exempel på användning förklarade steg för steg
Låt oss titta på några praktiska exempel för att illustrera de vanligaste fallen och även några mer avancerade:
- Konvertera en fil och skriv över:
dos2unix documento.txt
Det här kommandot bearbetar filen, tar bort CR-tecknen från varje rad och skriver resultatet till samma fil. - Generera en ny fil utan att ändra originalet:
dos2unix -n entrada.txt salida.txt
Konverteringen sparas i filen ”output.txt”. - Konvertera flera filer samtidigt:
dos2unix archivo1.txt archivo2.txt archivo3.txt - Tvinga fram konvertering av en fil som börjar med ett bindestreck:
dos2unix -- -foo.txt - Rekursivt konvertera filer i en katalog:
find . -name '*.txt' -print0 | xargs -0 dos2unix
Detta konverterar alla .txt-filer i mappstrukturen från den aktuella katalogen och neråt. - Konvertera filer med specifik kodning:
dos2unix -iso -n origen.txt destino.txt
Konverterar mellan en DOS-teckentabell och ISO-8859-1-standarden. - Identifiera och lista vilka filer som behöver konverteras:
dos2unix -ic *.txt
Visar endast filer som innehåller DOS-radbrytningar.
Vad gäller binära filer?
Standard, dos2unix e unix2dos ignorera automatiskt binära filer för att förhindra oavsiktlig korruption. Om du av någon anledning behöver tvinga fram konverteringen kan du använda parametern -f. Denna praxis rekommenderas inte eftersom det kan göra filer som inte strikt är text oanvändbara.
Hantera symboliska länkar och kataloger
Som standard ändrar inte dessa kommandon symboliska länkar eller kataloger. De erbjuder dock alternativ som t.ex. -F (följ symboliska länkar och konvertera deras destinationer), -R (ersätt symboliska länkar med de konverterade filerna), eller -S (ignorera symboliska länkar, vilket är standardalternativet).
Alternativ för visning och felsökning
Om du vill veta vilket format en fil har, eller hur många radbrytningar av varje typ den innehåller, kan du använda alternativet -i (o -info):
dos2unix -i archivo.txtvisar detaljerad information om radbrytningar och filtyp.
Genom att lägga till vissa flaggor kan du få anpassad information (t.ex. endast filer med CRLF, endast hoppräkning av Unix-typ, etc.).
Konverteringslägen: ascii, iso, 7bit, mac
- ascii (standard): Konverterar endast radslut. Det är det säkra alternativet för UTF-8-filer.
- iso: Utför konvertering mellan DOS-kodtabeller och ISO-8859-1-standarden. Användbart för gamla eller flerspråkiga filer.
- 7bit: Eliminerar 8-bitarstecken, användbart för mycket gamla system eller de som kräver extrem kompatibilitet.
- mac: Konverterar mellan klassiska Mac- och Unix-format.
Dessa lägen stöder kombination med andra alternativ för att konvertera olika filtyper enligt användarens behov.
Arbeta med skript och alternativa kommandon
Om ditt system inte har dos2unix/unix2dos installerat eller om du behöver utföra konverteringen manuellt (eller i skript), finns det flera alternativ med klassiska Unix-kommandon:
- Använda sed:
sed 's/\r$//' fichero.txt(^M anges med CTRL+V CTRL+M). - I modern GNU sed:
sed 's/\x0D$//' fichero.txt. - Konvertera från Unix till DOS med sed:
sed 's/$/\r/' fichero.txt. - Använda tr:
tr -d '\r' < input.file > output.file. - Med Perl:
perl -pi -e 's/\r\n/\n/g' input.file.
Dessa metoder är användbara när du inte har de specifika programmen installerade eller behöver en snabb lösning på begränsade system.
Konverteringsexempel med olika kodningar
Det stora utbudet av alternativ i dos2unix och unix2dos möjliggör hantering av en mängd olika scenarier. Låt oss titta på några exempel som illustrerar hur man kan hantera specifika behov:
- Från Windows UTF-16 (med BOM) till Unix UTF-8:
dos2unix -n in.txt out.txt - Från Windows UTF-16LE (ingen BOM) till Unix UTF-8:
dos2unix -ul -n in.txt out.txt - Från Unix UTF-8 till Windows UTF-8 (utan BOM):
unix2dos -m -n in.txt out.txt - Från Unix UTF-8 till Windows UTF-16:
unix2dos < in.txt | iconv -f UTF-8 -t UTF-16 > out.txt - Från Windows 1252 till Unix Latin-1:
dos2unix -1252 -n in.txt out.txt - Från Unix Latin-1 till DOS 850:
unix2dos -850 -n in.txt out.txt
I situationer där du behöver konvertera mellan ovanliga teckentabeller eller filer med internationella tecken kan du kombinera dos2unix/unix2dos med andra verktyg som t.ex. iconv för att konvertera mellan olika kodningar före eller efter att radbrytningar ändras.
Skript för masskonvertering och automatisering
En av styrkorna med dessa kommandon är deras integration i skript och automatiserade miljöer. Om du vill konvertera alla .txt-filer i en mapp (och undermappar) kan du använda de vanliga shell-kommandona:
- På Unix:
find . -name '*.txt' -print0 | xargs -0 dos2unix - På fönster CMD:
for /R %G in (*.txt) do dos2unix "%G" - En Power:
get-childitem -path . -filter '*.txt' -recurse | foreach-object {dos2unix $_.Fullname}
Användningen av -print0 y -0 I Unix kan du korrekt hantera filnamn med mellanslag, accenter eller citattecken.
Miljövariabler och regional anpassning
dos2unix/unix2dos låter dig justera språk och lokalisering med hjälp av flera miljövariabler:
- SPRÅK: Välj det primära språket. Exempel:
export LANG=es_ESför spanska från Spanien. - SPRÅK: Tillåter en lista över föredragna språk. Exempel:
LANGUAGE=es:en. - DOS2UNIX_LOCALEDIR: Definierar sökvägen till programmets språkfiler.
Dessa alternativ är särskilt användbara i internationella miljöer eller miljöer med flera användare.
Avsluts-, fel- och returmeddelanden
När programmet är klart återgår det 0 om allt gick bra eller 1 om det har uppstått ett fel som inte är relaterat till operativsystemet. I tyst läge (-q), förblir returvärdet noll om det inte finns ett fel i parametrarna eller felaktig användning av alternativ.
Bortom dos2unix och unix2dos: Andra verktyg och dokumentation
För specialfall relaterade till konvertering av textfiler kan du konsultera andra kommandon och program som t.ex. fil, iconv, finna o xargs. Alla dessa kan kombineras för att skapa robusta lösningar som är helt anpassade till varje projekts behov.
Om du vill gå djupare finns det några användbara resurser:
Installera dos2unix/unix2dos på större system
I de flesta Linuxdistributioner och Unix-miljöer kan dessa kommandon enkelt installeras:
- Debian/Ubuntu:
sudo apt-get install dos2unix - CentOS/Red Hat:
sudo yum install dos2unix - Arch Linux:
sudo pacman -S dos2unix
På system som Ubuntu, till exempel, om du söker efter "dos2unix" eller "unix2dos" och du inte har dem tillgängliga, behöver du bara installera motsvarande paket (tidigare hette det "sysutils"). I Windows-miljöer finns det portabla versioner eller så kan du använda emulatorer som Cygwin eller WSL.
Passionerad författare om bytesvärlden och tekniken i allmänhet. Jag älskar att dela med mig av min kunskap genom att skriva, och det är vad jag kommer att göra i den här bloggen, visa dig alla de mest intressanta sakerna om prylar, mjukvara, hårdvara, tekniska trender och mer. Mitt mål är att hjälpa dig att navigera i den digitala världen på ett enkelt och underhållande sätt.
