免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9083 | 回复: 26
打印 上一主题 下一主题

递归把一个目录包括子目录中的所有文件转换成unix格式 [复制链接]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-10 06:20:00每日论坛发贴之星
日期:2016-08-10 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-09 11:51 |只看该作者 |倒序浏览
各位,兄弟最近实现了一个可以递归把一个目录包括子目录中的所有文件转换成unix格式文件的shell script,但是如果一个文件名中间有空格(比如叫"how to do.txt")就会停止工作,我不知道如何解决,希望大侠们帮忙解决一下子,谢谢!
代码如下:

#!/bin/bash

#This script convert all the files within $1 directory to DOS format.

#bug:can't convert files if the filename contains spaces.

#                                -leiyu.


recursive_dos2unix()
{
        for x in $(ls)
        do
                if [ -f "$x" ]
                then
                        chmod a+w ./"$x"
                        dos2unix ./"$x"
                        chmod a-w ./"$x"

                elif [ -L "$x" ]
                then
                        echo "this is a link"
                else
                        cd "$x"

                        if [ "$?" != "0" ]
                        then
                            echo "cd failed, exit now."
                            exit 1
                        fi

                        pwd
                        recursive_dos2unix
                        cd ..
                fi
        done
}

echo "Start convert"
cd $1
recursive_dos2unix
echo "end of convert"


[ 本帖最后由 ytsmtipe 于 2009-6-9 11:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-06-09 12:02 |只看该作者
for x in "$(ls)"

论坛徽章:
0
3 [报告]
发表于 2009-06-09 12:06 |只看该作者
find . -type f -exec dos2unix {}  \;

论坛徽章:
0
4 [报告]
发表于 2009-06-09 12:11 |只看该作者
find . -type f -exec dos2unix {} \;

论坛徽章:
0
5 [报告]
发表于 2009-06-09 12:12 |只看该作者
原来有人已经发了

论坛徽章:
0
6 [报告]
发表于 2009-06-09 12:12 |只看该作者
第一次使用这个变量时完成:

x=${x//\ /\\\ }                   //目的是把空格换成"\ "

[ 本帖最后由 mixednuts 于 2009-6-9 12:18 编辑 ]

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-08-10 06:20:00每日论坛发贴之星
日期:2016-08-10 06:20:00
7 [报告]
发表于 2009-06-09 13:10 |只看该作者

回复 #2 lululau 和mixednuts 的帖子

刚刚试验了一下子,两位提出的方法,好像没有起作用。

论坛徽章:
0
8 [报告]
发表于 2009-06-09 13:19 |只看该作者

回复 #7 ytsmtipe 的帖子

for x in $(ls)
ls的输出,shell会以IFS分割然后进行循环

加引号的话ls的内容会作为一个整体,只循环一次

[ 本帖最后由 ywlscpl 于 2009-6-9 13:27 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-06-09 13:32 |只看该作者
原帖由 ywlscpl 于 2009-6-9 13:19 发表
for x in $(ls)
ls的输出,shell会以IFS分割然后进行循环

加引号的话ls的内容会作为一个整体,只循环一次



我的想法和你一样

可是有一种情况很奇怪:

  1. [root@0609-0090 ~/cafe/sh]# ls | cat
  2. 3-3.sh
  3. abc sa
  4. at--help.txt
  5. chars
  6. iii
  7. puzzle.sh
  8. test-suspend.sh
  9. [root@0609-0090 ~/cafe/sh]# for i in "$(ls)"; do echo $i; done
  10. 3-3.sh abc sa at--help.txt chars iii puzzle.sh test-suspend.sh
  11. [root@0609-0090 ~/cafe/sh]# for i in "$(ls)"; do echo "$i"; done
  12. 3-3.sh
  13. abc sa
  14. at--help.txt
  15. chars
  16. iii
  17. puzzle.sh
  18. test-suspend.sh
  19. [root@0609-0090 ~/cafe/sh]# uname -a
  20. CYGWIN_NT-5.1 0609-0090 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin
  21. [root@0609-0090 ~/cafe/sh]# echo $SHELL
  22. /bin/bash
  23. [root@0609-0090 ~/cafe/sh]#

复制代码

论坛徽章:
0
10 [报告]
发表于 2009-06-09 13:36 |只看该作者
ls |sed 's/\ /\\\ /g'| xargs dos2unix
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP