Il existe plusieurs programmes dédiés, dont
dos2unix
et à unix2dos
partir des outils dos2unix
todos
et à fromdos
partir des outils tofrodos
Choisissez simplement l'outil pour la direction appropriée et passez les noms des fichiers à convertir sur la ligne de commande.
Si vous n'en avez pas non plus, mais avez Linux ou Cygwin:
sed -i -e 's/\r\+$//' filename # dos|unix -> unix
sed -i -e 's/\r*$/\r/' filename # dos|unix -> dos
Si vous avez perl:
perl -i -pe 's/\r+$//' filename # dos|unix -> unix
perl -i -pe 's/\r*$/\r/' filename # dos|unix -> dos
Avec seulement les outils POSIX (y compris BusyBox), pour passer d'Unix à DOS, vous devrez passer le caractère CR littéralement dans la commande sed.
cr=$(echo | tr '\n' '\r')
sed -e "s/$cr*\$/$cr/" <filename >filename.dos
mv filename.dos filename
Dans l'autre sens, vous pouvez simplement supprimer tous les CR:
tr -d '\r' <filename >filename.dos
mv filename.dos filename
Vous pouvez utiliser des caractères génériques pour convertir plusieurs fichiers dans le même répertoire à la fois, par exemple
sed -i -e 's/\r\+$//' *.txt
Pour convertir tous les fichiers du répertoire courant et de ses sous-répertoires, si votre shell est zsh, vous pouvez utiliser **/
, par exemple
sed -i -e 's/\r\+$//' **/*.txt
Vous pouvez utiliser **/
en bash ≥4, mais vous devez d' shopt -s globstar
abord exécuter (vous pouvez mettre cette ligne dans votre ~/.bashrc
). Vous pouvez utiliser **/
dans ksh93, mais vous devez d' set -o globstar
abord exécuter (vous pouvez mettre cette ligne dans votre ~/.kshrc
.
Si vous ne pouvez utiliser que les outils qui nécessitent une redirection, utilisez une for
boucle.
for x in *.txt; do
tr -d '\r' <"$x" >"$x.dos"
mv -- "$x.dos" "$x"
done
Si vous n'avez pas **/
ou n'avez pas besoin d'une correspondance plus complexe pour sélectionner les fichiers à convertir, utilisez la find
commande. Voici un exemple Linux / Cygwin qui convertit récursivement tous les fichiers du répertoire courant et de ses sous-répertoires, à l'exception des fichiers appelés .o
et des sous-répertoires appelés bin
.
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sed -i -e 's/\r\+$//' {} +
Voici un exemple POSIX. Nous disons find
de démarrer un shell qui peut effectuer la redirection nécessaire.
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sh -c '
tr -d '\r' <"$0" >"$0.dos"
mv -- "$0.dos" "$0"
' {} \;
Vous pouvez rendre la find
méthode légèrement plus rapide, au détriment d'un code plus complexe, en utilisant une boucle dans la commande shell.
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sh -c '
for x; do
tr -d '\r' <"$x" >"$x.dos"
mv -- "$x.dos" "$x"
done
' _ {} +