2011-03-25 50 views
1

我有此腳本命令unix2dos

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

我想從許多文件,這是在多個子目錄刪除「^ M」 charcaters。我得到了這個:

fromdos: Unable to access file 

是否有somethig我失蹤?

在此先感謝。

+0

變量$原稿是不確定的。 – 2011-03-25 18:52:49

回答

1

我猜你不需要爲環路

這裏是解決方案的擴展名爲 「.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' {} \; 
2

ls -R列出了一切,包括目錄。所以你告訴fromdos在實際的目錄上的行爲是一些情況。

嘗試這樣:

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

非常感謝你! 它的工作原理! – Fernando 2011-03-25 19:20:51

+0

很高興聽到它!如果你打小「接受的答案」按鈕,我會:-) – Jonathan 2011-03-25 19:31:22

+0

非常感謝添加路徑查找將是不錯的:-) – hornetbzz 2011-03-27 02:38:07