[Windows VPS] 求助下一个Bash脚本的问题 只看楼主

菜鸡一只 ,请大佬帮忙
东拼西凑出一个来
  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/

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

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

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

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

感谢回复
引用: Sakuya 发表于 2018-12-24 19:55
实际上很简单..你多执行几次就行了

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

道理上是这样,但是下级目录中报错的时候该如何继续呢?
可以的话写下code,谢谢
试下这个,没跑过哈
艹,手机上打的,好像代码没发出来。
  • 10# Sakuya
  • 2018-12-24 23:19:02
引用: duwei0997 发表于 2018-12-24 22:06
道理上是这样,但是下级目录中报错的时候该如何继续呢?
可以的话写下code,谢谢 ...

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