Yanıtlar:
Bu duruma göre değişir: dosyalar sürüm kontrolü altındaysa, bu oldukça popüler olmayan bir tarihi kirletici karar olabilir. Git, check-out sırasında satır sonlarını otomatik olarak dönüştürme seçeneğine sahiptir.
Eğer umursamıyorsanız ve hızlı bir şekilde dönüştürmek istiyorsanız, fromdos
/ todos
ve dos2unix
/ gibi programları unix2dos
sizin için yapar. Sen kullanabilirsiniz find
: find . -type f -name '*.php' -exec dos2unix '{}' +
.
Aşağıdakiler de dahil olmak üzere çeşitli özel programlar vardır
Sadece uygun yön için aracı seçin ve dönüştürülecek dosyaların adlarını komut satırına iletin.
Bunlardan birine sahip değilseniz, ancak Linux veya Cygwin'iniz varsa:
sed -i -e 's/\r\+$//' filename # dos|unix -> unix
sed -i -e 's/\r*$/\r/' filename # dos|unix -> dos
Perl'iniz varsa:
perl -i -pe 's/\r+$//' filename # dos|unix -> unix
perl -i -pe 's/\r*$/\r/' filename # dos|unix -> dos
Yalnızca POSIX araçlarıyla (BusyBox dahil), unix'ten dos'ya geçmek için CR karakterini tam anlamıyla sed komutuna iletmeniz gerekir.
cr=$(echo | tr '\n' '\r')
sed -e "s/$cr*\$/$cr/" <filename >filename.dos
mv filename.dos filename
Diğer yönde, tüm CR'leri silebilirsiniz:
tr -d '\r' <filename >filename.dos
mv filename.dos filename
Aynı dizindeki birçok dosyayı bir kerede dönüştürmek için joker karakterler kullanabilirsiniz, ör.
sed -i -e 's/\r\+$//' *.txt
Geçerli dizindeki ve alt dizinlerindeki tüm dosyaları dönüştürmek için kabuğunuz zsh ise **/
, örn.
sed -i -e 's/\r\+$//' **/*.txt
**/
Bash ≥4 içinde kullanabilirsiniz , ancak shopt -s globstar
önce çalıştırmanız gerekir (bu satırı içine koyabilirsiniz ~/.bashrc
). **/
Ksh93 içinde kullanabilirsiniz , ancak önce koşmanız gerekir set -o globstar
(bu satırı içine koyabilirsiniz ~/.kshrc
.
Yalnızca yeniden yönlendirme gerektiren araçları kullanabiliyorsanız, bir for
döngü kullanın .
for x in *.txt; do
tr -d '\r' <"$x" >"$x.dos"
mv -- "$x.dos" "$x"
done
**/
Hangi dosyaların dönüştürüleceğini seçmek için daha karmaşık bir eşleşmeye sahip değilseniz veya ihtiyacınız yoksa , find
komutu kullanın. Burada, denilen .o
alt dizinlerin altındaki ve altındaki dosyalar hariç, geçerli dizinin ve alt dizinlerinin altındaki tüm dosyaları yinelemeli olarak dönüştüren bir Linux / Cygwin örneği verilmiştir bin
.
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sed -i -e 's/\r\+$//' {} +
İşte bir POSIX örneği. find
Gerekli yeniden yönlendirmeyi gerçekleştirebilecek bir kabuk başlatmayı söylüyoruz .
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sh -c '
tr -d '\r' <"$0" >"$0.dos"
mv -- "$0.dos" "$0"
' {} \;
find
Kabuk komutunda bir döngü kullanarak yöntemi daha karmaşık kod pahasına biraz daha hızlı yapabilirsiniz .
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
' _ {} +
winscp de söylendiğinde otomatik olarak dönüştürülecektir .
Dosyalarınız aynı dizinde bulunuyorsa:
DIRECTORY=/your/directory
unix2dos $DIRECTORY/*