1

我有这个脚本

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

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

fromdos: Unable to access file

有什么我想念的吗?

提前致谢。

4

2 回答 2

2

ls -R列出所有内容,包括目录。因此,在某些情况下,您要fromdos对实际目录采取行动。

尝试这样的事情:

find . -type f -exec fromdos {} \;
于 2011-03-25T18:47:43.090 回答
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' {} \;
于 2011-03-27T03:08:30.653 回答