dos2unix命令

发布于 2024-10-27 08:20:49 字数 235 浏览 6 评论 0原文

我有这个脚本

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

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

fromdos: Unable to access file

我缺少什么吗?

提前致谢。

I have this script

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

I want to remove "^M" charcaters from many files which are in more subdirectories. I got this:

fromdos: Unable to access file

Is there somethig i'm missing?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苏大泽ㄣ 2024-11-03 08:20:49

ls -R 列出所有内容,包括目录。因此,在某些情况下,您会告诉 fromdos 对实际目录进行操作。

尝试这样的事情:

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

ls -R lists everything, including directories. So you're telling fromdos to act on actual directories is some cases.

Try something like this:

find . -type f -exec fromdos {} \;
失眠症患者 2024-11-03 08:20:49

我猜你不需要 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' {} \;

I guess you don't need a for loop.

Here is a quick panorama of solutions for files with extension ".ext" (such commands shall be somehow restrictive)

note : ^M is obtained with 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' {} \;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文