免费注册 查看新帖 |

Chinaunix

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

[文件目录] 菜鸟求助shell切换目录问题?谢谢! [复制链接]

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-04 22:32 |只看该作者 |倒序浏览
本帖最后由 tengfei0311 于 2016-08-30 20:06 编辑
  1. #!/bin/sh
  2. ##
  3. export SAC_DISPLAY_COPYRIGHT=0

  4. worksta="/Users/Desktop/Noise"
  5. cd $worksta

  6. ##############################
  7. year=2014
  8. cd $year
  9.    for month in `ls $year* -d`;do
  10.    cd $month
  11.       for day in `ls $month* -d`;do
  12.       cd $day
  13. ###############################   
  14.        for file in `ls *seed`;do
  15.           rdseed -pfd $file         
  16.        mv SAC_PZs*BHN* SAC_PZs_BHN
  17.        mv SAC_PZs*BHE* SAC_PZs_BHE
  18.        mv SAC_PZs*BHZ* SAC_PZs_BHZ   
  19.        for BH in BHZ BHN BHE;do
  20.        gsac << EOF
  21.        r *$BH*SAC
  22.        merge
  23.        decimate 100
  24.        w $BH
  25.        q
  26. EOF
  27. done
  28. done
  29. cd ..
  30. done
  31. cd ..
  32. done

复制代码
运行上述脚本,一直报错找不到目录,目录确实存在,在mac终端一个个命令输入可以切换,放这个小脚本你们运行脚本就报错,提示找不到目录,如下:
  1. bash-3.2$ sh pre.sh
  2. ls: -d: No such file or directory
  3. pre.sh: line 12: cd: 201401:: No such file or directory
  4. ls: 20140105*: No such file or directory
  5. pre.sh: line 12: cd: 20140106: No such file or directory
复制代码
求大神帮看看,谢谢!!!

1.jpg (28.43 KB, 下载次数: 97)

1.jpg

求职 : Linux运维
论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-01-06 06:20:00
2 [报告]
发表于 2016-01-05 00:21 |只看该作者
本帖最后由 鱼头_火锅 于 2016-01-05 00:33 编辑

你的脚本在循环里,第一次进入到最底层目录的时候,没有返回。始终停留在/2014/201401/20140101/目录里。这样就导致后续找不到所要的目录了。

在shell脚本里用绝对路径即可解决问题!cd $year 改成 cd "$worksta/$year"
其它的依此类推,都改成绝对路径,问题解决 !

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
3 [报告]
发表于 2016-01-05 01:25 |只看该作者
回复 2# 鱼头_火锅

谢谢您帮我解答,但是我按照你的改完后,运行还是一样的报错啊,不知道什么原因
  1. worksta="/Users/wtf/Desktop/Noise"
  2. cd $worksta

  3. ##############################
  4. year=2014
  5. cd "$worksta/$year"
  6.    for month in `ls $year* -d`;do
  7.    cd "$worksta/$year/$month"
  8.       for day in `ls $month* -d`;do
  9.       cd "$worksta/$year/$month/$day”
复制代码
…………...
…………...

你的意思是这样改吗?
   

求职 : Linux运维
论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-01-06 06:20:00
4 [报告]
发表于 2016-01-05 05:24 来自手机 |只看该作者
本帖最后由 鱼头_火锅 于 2016-01-05 05:38 编辑

我的意思就是这样改的。现在报什么错?截个图!

楼主是在中国吗?半夜还工作?

论坛徽章:
0
5 [报告]
发表于 2016-01-05 10:33 |只看该作者
sh -x pre.sh
看看哪里出错了呗。

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
6 [报告]
发表于 2016-01-05 10:36 |只看该作者
回复 4# 鱼头_火锅

好像这样改报错跟上面一样
  1. wtf-MacBookPro:Noise wtf$ sh pre.sh
  2. ls: -d: No such file or directory
  3. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/201401:: No such file or directory
  4. ls: -d: No such file or directory
  5. ls: 201401:*: No such file or directory
  6. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/20140101: No such file or directory
  7. ls: -d: No such file or directory
  8. ls: 20140101*: No such file or directory
  9. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/20140102: No such file or directory
  10. ls: -d: No such file or directory
  11. ls: 20140102*: No such file or directory
  12. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/20140103: No such file or directory
  13. ls: -d: No such file or directory
  14. ls: 20140103*: No such file or directory
  15. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/20140104: No such file or directory
  16. ls: -d: No such file or directory
  17. ls: 20140104*: No such file or directory
  18. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/20140105: No such file or directory
  19. ls: -d: No such file or directory
  20. ls: 20140105*: No such file or directory
  21. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/20140106: No such file or directory
复制代码

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
7 [报告]
发表于 2016-01-05 10:37 |只看该作者
本帖最后由 tengfei0311 于 2016-01-05 15:46 编辑

回复 5# jian100328823

谢谢您给我提供帮助,我按照你说的 sh -x pre.sh

报错如下:(复制了部分)
  1. wtf-MacBookPro:Noise wtf$ sh -x pre.sh
  2. + export SAC_DISPLAY_COPYRIGHT=0
  3. + SAC_DISPLAY_COPYRIGHT=0
  4. + worksta=/Users/wtf/Desktop/Noise
  5. + cd /Users/wtf/Desktop/Noise
  6. + year=2014
  7. + cd /Users/wtf/Desktop/Noise/2014
  8. ++ ls 201401 -d
  9. ls: -d: No such file or directory
  10. + for month in '`ls $year* -d`'
  11. + cd /Users/wtf/Desktop/Noise/2014/201401:
  12. pre.sh: line 12: cd: /Users/wtf/Desktop/Noise/2014/201401:: No such file or directory
  13. ++ ls '201401:*' -d
  14. ls: -d: No such file or directory
  15. ls: 201401:*: No such file or directory
  16. + cd ..
  17. + for month in '`ls $year* -d`'
复制代码

论坛徽章:
0
8 [报告]
发表于 2016-01-05 11:08 |只看该作者
`ls -d $year* `

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
9 [报告]
发表于 2016-01-05 13:13 |只看该作者
因为,一般我们跑的 shell script 是用 subshell 去执行的。
从 process 的观念来看,是 parent process 产生一个 child process 去执行, 当 child 结束后,会返回 parent ,但 parent 的环境是不会因 child 的改变而改变的。

执行脚本方式: source ./shell-script

论坛徽章:
3
2015亚冠之布里斯班狮吼
日期:2015-06-25 18:46:20程序设计版块每日发帖之星
日期:2015-09-17 06:20:0015-16赛季CBA联赛之江苏
日期:2017-01-09 21:37:58
10 [报告]
发表于 2016-01-05 15:46 |只看该作者
回复 8# 2005wind

还是有问题 不行 报错啊
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP