全球主机交流论坛

标题: 求助下一个Bash脚本的问题 [打印本页]

作者: duwei0997    时间: 2018-12-24 17:04
标题: 求助下一个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/


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

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

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

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

感谢回复
作者: duwei0997    时间: 2018-12-24 22:06
Sakuya 发表于 2018-12-24 19:55
实际上很简单..你多执行几次就行了

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

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

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




欢迎光临 全球主机交流论坛 (https://ddzzz.eu.org/) Powered by Discuz! X3.4