dos2unix命令

时间:2011-03-25 18:45:02

标签: linux sh dos2unix

我有这个脚本

#!/bin/sh
for i in `ls -R`
do
  echo "Changing $i"
  fromdos $i 
done

我想从更多子目录中的许多文件中删除“^ M”字符。我明白了:

fromdos: Unable to access file

有什么东西我不见了吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

ls -R列出所有内容,包括目录。所以你告诉fromdos在某些情况下对实际目录采取行动。

尝试这样的事情:

find . -type f -exec fromdos {} \;

答案 1 :(得分:1)

我猜你不需要 for 循环。

以下是扩展名为“.ext”的文件解决方案的快速全景(此类命令应以某种方式限制)

注意:^ M是用CTRL-V“+”CTRL-M“

获得的
# PORTABLE SOLUTION 
find /home -type f -name "*.ext" -exec sed -i -e 's/^M$//' {} \;

# GNU-sed
find /home -type f -name "*.ext" -exec sed -i -e "s/\x0D$//g" {} \;

# SED with more recent nux
find /home -type f -name "*.ext" -exec sed -i -e "s/\r$//g" {} \;

# DOS2UNIX
find /home -type f -name "*.ext" -print0 | while read -r -d "$(printf "\000")" -r path; do dos2unix $path $path"_new"; done

# AWK
 find /home -type f -name "*.ext" -print0 | while read -r -d "$(printf "\000")" -r path; do awk '{ sub("\r$", ""); print }' $path > $path"_new"; done

# TR
 find /home -type f -name "*.ext" -print0 | while read -r -d "$(printf "\000")" -r path; do cat $path | tr -d '\r' > $path"_new"; done

# PERL
 find /home -type f -name "*.ext" -exec perl -pi -e 's/\r//g' {} \;