找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 75|回复: 9

求助下一个Bash脚本的问题

[复制链接]

4

主题

91

回帖

222

积分

中级会员

积分
222
发表于 2018-12-24 17:04:57 | 显示全部楼层 |阅读模式
菜鸡一只

,请大佬帮忙
东拼西凑出一个来
[ol]
  • find "$filepath/." -name "* *"|
  • while read name;do
  •         na=$(echo $name | tr ' ' '_')
  •         mv "$name" $na
  • done[/ol]复制代码

    会寻找指定目录下的文件夹名或文件名,当名称中存在空格就会用_替换。
    但是如果下级目录中有空格就会报错终止。
    比如Download/1 2/,中没有错误,1 2文件夹就会更名为1_2
    如果1 2文件夹下有个3 4文件夹,就会报错终止。

    如何修改可以遍历目录下所有层级,实现
    download/1 2/3 4/5 6/ 更名为 download/1_2/3_4/5_6/

  • 回复

    使用道具 举报

    3

    主题

    441

    回帖

    915

    积分

    高级会员

    积分
    915
    发表于 2018-12-24 19:28:27 | 显示全部楼层
    消灭两小时零回复,哈哈…
    回复

    使用道具 举报

    3

    主题

    441

    回帖

    915

    积分

    高级会员

    积分
    915
    发表于 2018-12-24 19:35:33 | 显示全部楼层
    没在电脑前,楼主可以考虑每次只处理最后一层文件或者目录,加个循环判断是否还有需要改名的文件或者手工多执行几次,
    回复

    使用道具 举报

    41

    主题

    239

    回帖

    635

    积分

    高级会员

    积分
    635
    发表于 2018-12-24 19:55:02 | 显示全部楼层
    本帖最后由 Sakuya 于 2018-12-24 19:56 编辑

    实际上很简单..你多执行几次就行了

    第一次执行改一级目录,第二次执行改二级目录,这样,执行到没有报错为止
    回复

    使用道具 举报

    33

    主题

    949

    回帖

    2083

    积分

    金牌会员

    积分
    2083
    发表于 2018-12-24 20:09:03 | 显示全部楼层
    你应该用 find -exec 来处理。或者目录递归。你这种写法不错问题基本不可能,因为管道两边是同时运行的,大概率会失步。就跟java多线程同时一个线程遍历list,一个线程修改list一个道理。
    回复

    使用道具 举报

    4

    主题

    91

    回帖

    222

    积分

    中级会员

    积分
    222
     楼主| 发表于 2018-12-24 22:03:37 | 显示全部楼层

    laofanne 发表于 2018-12-24 19:35

    没在电脑前,楼主可以考虑每次只处理最后一层文件或者目录,加个循环判断是否还有需要改名的文件或者手工多 ...

    这个思路如何确定总共有几层目录呢?
    比如download下可能只有“1 2”目录,也有可能在“1 2”下还有“3 4”甚至更多层目录

    感谢回复
    回复

    使用道具 举报

    4

    主题

    91

    回帖

    222

    积分

    中级会员

    积分
    222
     楼主| 发表于 2018-12-24 19:35:00 | 显示全部楼层

    Sakuya 发表于 2018-12-24 19:55

    实际上很简单..你多执行几次就行了

    第一次执行改一级目录,第二次执行改二级目录,这样,执行到没有报错为 ...

    道理上是这样,但是下级目录中报错的时候该如何继续呢?
    可以的话写下code,谢谢

    回复

    使用道具 举报

    3

    主题

    441

    回帖

    915

    积分

    高级会员

    积分
    915
    发表于 2018-12-24 22:06:19 | 显示全部楼层
    试下这个,没跑过哈
    回复

    使用道具 举报

    3

    主题

    441

    回帖

    915

    积分

    高级会员

    积分
    915
    发表于 2018-12-24 19:55:00 | 显示全部楼层
    艹,手机上打的,好像代码没发出来。
    回复

    使用道具 举报

    41

    主题

    239

    回帖

    635

    积分

    高级会员

    积分
    635
    发表于 2018-12-24 22:37:30 | 显示全部楼层

    duwei0997 发表于 2018-12-24 22:06

    道理上是这样,但是下级目录中报错的时候该如何继续呢?
    可以的话写下code,谢谢 ...

    就是你那个命令 多执行几次就行了
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|Discuz! X

    GMT+8, 2025-4-26 18:56 , Processed in 0.030100 second(s), 4 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表