全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1029|回复: 9

[Windows VPS] 求助下一个Bash脚本的问题

[复制链接]
发表于 2018-12-24 17:04:57 | 显示全部楼层 |阅读模式
菜鸡一只 ,请大佬帮忙
东拼西凑出一个来
  1. find "$filepath/." -name "* *"|
  2. while read name;do
  3.         na=$(echo $name | tr ' ' '_')
  4.         mv "$name" $na
  5. done
复制代码


会寻找指定目录下的文件夹名或文件名,当名称中存在空格就会用_替换。
但是如果下级目录中有空格就会报错终止。
比如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/

发表于 2018-12-24 19:28:27 来自手机 | 显示全部楼层
消灭两小时零回复,哈哈…
发表于 2018-12-24 19:35:33 来自手机 | 显示全部楼层
没在电脑前,楼主可以考虑每次只处理最后一层文件或者目录,加个循环判断是否还有需要改名的文件或者手工多执行几次,
发表于 2018-12-24 19:55:02 | 显示全部楼层
本帖最后由 Sakuya 于 2018-12-24 19:56 编辑

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

第一次执行改一级目录,第二次执行改二级目录,这样,执行到没有报错为止
发表于 2018-12-24 20:09:03 来自手机 | 显示全部楼层
你应该用 find -exec 来处理。或者目录递归。你这种写法不错问题基本不可能,因为管道两边是同时运行的,大概率会失步。就跟java多线程同时一个线程遍历list,一个线程修改list一个道理。
 楼主| 发表于 2018-12-24 22:03:37 | 显示全部楼层
laofanne 发表于 2018-12-24 19:35
没在电脑前,楼主可以考虑每次只处理最后一层文件或者目录,加个循环判断是否还有需要改名的文件或者手工多 ...

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

感谢回复
 楼主| 发表于 2018-12-24 22:06:19 | 显示全部楼层
Sakuya 发表于 2018-12-24 19:55
实际上很简单..你多执行几次就行了

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

道理上是这样,但是下级目录中报错的时候该如何继续呢?
可以的话写下code,谢谢
发表于 2018-12-24 22:37:30 | 显示全部楼层
试下这个,没跑过哈
发表于 2018-12-24 22:38:34 | 显示全部楼层
艹,手机上打的,好像代码没发出来。
发表于 2018-12-24 23:19:02 | 显示全部楼层
duwei0997 发表于 2018-12-24 22:06
道理上是这样,但是下级目录中报错的时候该如何继续呢?
可以的话写下code,谢谢 ...

就是你那个命令 多执行几次就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-3 08:56 , Processed in 0.061819 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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