Відповіді:
Це залежить: якщо файли знаходяться під контролем версій, це може бути досить непопулярним рішенням, що забруднює історію. У Git є можливість автоматичного перетворення закінчень рядків під час виїзду.
Якщо вам все одно і хочете швидко конвертувати, є такі програми, як fromdos
/ todos
і dos2unix
/, unix2dos
які роблять це за вас. Ви можете використовувати find
: find . -type f -name '*.php' -exec dos2unix '{}' +
.
Є кілька виділених програм, в тому числі
Просто виберіть інструмент у відповідному напрямку та передайте імена файлів для конвертування у командному рядку.
Якщо у вас немає жодного, але у вас є Linux або Cygwin:
sed -i -e 's/\r\+$//' filename # dos|unix -> unix
sed -i -e 's/\r*$/\r/' filename # dos|unix -> dos
Якщо у вас є Perl:
perl -i -pe 's/\r+$//' filename # dos|unix -> unix
perl -i -pe 's/\r*$/\r/' filename # dos|unix -> dos
Маючи лише інструменти POSIX (включаючи BusyBox), щоб перейти від unix до dos, вам потрібно буде передати символ CR буквально в команді sed.
cr=$(echo | tr '\n' '\r')
sed -e "s/$cr*\$/$cr/" <filename >filename.dos
mv filename.dos filename
В іншому напрямку ви можете просто видалити всі КР:
tr -d '\r' <filename >filename.dos
mv filename.dos filename
Ви можете використовувати символи для перетворення одразу багатьох файлів у одному каталозі, наприклад
sed -i -e 's/\r\+$//' *.txt
Для перетворення всіх файлів у поточному каталозі та його підкаталогах, якщо ваша оболонка zsh, ви можете використовувати **/
, наприклад,
sed -i -e 's/\r\+$//' **/*.txt
Ви можете використовувати **/
в bash ≥4, але вам потрібно запустити shopt -s globstar
перший (ви можете помістити цей рядок у свій ~/.bashrc
). Ви можете використовувати **/
в ksh93, але вам потрібно запустити set -o globstar
спочатку (ви можете помістити цей рядок у свій ~/.kshrc
.
Якщо ви можете використовувати лише інструменти, які потребують перенаправлення, використовуйте for
цикл.
for x in *.txt; do
tr -d '\r' <"$x" >"$x.dos"
mv -- "$x.dos" "$x"
done
Якщо у вас немає **/
або потрібна більш складна відповідність для вибору файлів для конвертування, скористайтеся find
командою. Ось приклад Linux / Cygwin, який конвертує всі файли в поточному каталозі та його підкаталогах рекурсивно, за винятком файлів, що називаються .o
та під назвами підкаталогів bin
.
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sed -i -e 's/\r\+$//' {} +
Ось приклад POSIX. Ми кажемо find
запустити оболонку, яка може виконати необхідне перенаправлення.
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sh -c '
tr -d '\r' <"$0" >"$0.dos"
mv -- "$0.dos" "$0"
' {} \;
Ви можете зробити find
метод трохи швидше, за рахунок більш складного коду, використовуючи цикл у команді 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
' _ {} +
wincp також автоматично перетвориться, якщо це буде сказано .
Якщо ваші файли містяться в одному каталозі:
DIRECTORY=/your/directory
unix2dos $DIRECTORY/*