免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6499 | 回复: 29

[文件目录] 请问怎么实现linux下根据文件结构的一个跳转程序? [复制链接]

论坛徽章:
0
发表于 2018-05-20 12:38 |显示全部楼层
linux数据结构如下:

/qs/project/*1/*2/*3/*user*,   *1/*2/*3名字随机,这样命名方便后面说明, *user*是包含有用户名的文件夹,例如:/qs/project/ab/proc/projectA/*userA*, 其中/qs/project这2个目录名字是确定的,程序可以固定,接下去的3个星号文件夹名字不是固定的,随意的,*user*是包含有用户名的文件名字,他下面的文件结构是固定的,后面需要用到/*user*/project/cds/.cshrc

程序目标:
1,用户userA随便在terminal里敲命令: sw,则terminal输出:
No                    Name                         Time
1                      module/userA              2018.04.22.16:29
2                      module/userA_1          2018.04.22.16:29
3                      proj/auserA_3             2018.02.25.17:23
...........................

说明:第一列序号用来统计数目,第二列是名字,即把所有的*3下面的包含有userA名字的目录输出,module,proj这些是*3的名字,第三列是*userA*目录下所有文件最后修改时间,*userA*下还有别的文件夹和文件,遍历一下,找到最新修改的,输出这个时间,这点如果比较麻烦不输出时间也行。

2,用户userA接着敲命令:sw module/userA, 则 cd /qs/project/*1/*2/module/userA, 然后再source userA目录下的:/project/cds/.cshrc

3,用户userA如果敲命令:sw -u userB, 则terminal输出所有含有userB的目录,输出规则参考第一条中的格式。相当于userA也可以查看userB的目录。userA只输入sw,相当于缺省了-u userA, 输出自己的目录。

4,程序的鲁棒性:用户的任意输入假设不符合上面规则,请出错输出提示信息。

不清楚的我后面补充,非常谢谢!

论坛徽章:
0
发表于 2018-05-20 12:40 |显示全部楼层
发在perl版本好像不合适,求大神费费心帮忙看一下!

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2018-05-20 17:09 |显示全部楼层
本帖最后由 christmas1102 于 2018-05-20 17:18 编辑

要取到那个 *userA*目录 用shell脚本写,大致能用find
比如:
  1. find /qs/project/ -maxdepth 4 -type d -a -regex '.+/[^/].*UserA.*'
复制代码

这里正则写的可能不够严谨,差不多就这样,指定一个层数,这里经常要用就给一个变量或者函数
其他的就按照这个来了,拿到路径,后面 cd 也好,遍历也好,计数就 awk? ,name这里的取值可以用 sed,比如 路径后 sed -rn 's#.*\/(\w+/.+User.+)#\1#p' , mtime可以用 xargs 接ls 或者 find 输出 -printf "%CY-%Cm-%Cd %CR\n",如果统计的是就是遍历的 USER目录 就指定 maxdepth 0
总之.. 还不太理解,需求是 需要写脚本的思路 还是说只要取到目录的值?

论坛徽章:
8
CU十四周年纪念徽章
日期:2017-08-28 17:16:1915-16赛季CBA联赛之北控
日期:2018-03-29 11:39:0615-16赛季CBA联赛之上海
日期:2018-05-21 10:46:10技术图书徽章
日期:2018-09-03 13:54:18技术图书徽章
日期:2018-09-03 13:54:2815-16赛季CBA联赛之四川
日期:2020-10-15 09:21:4720周年集字徽章-20	
日期:2020-10-28 13:53:0220周年集字徽章-庆
日期:2020-10-28 14:09:12
发表于 2018-05-21 10:45 |显示全部楼层
本帖最后由 龙牙地主天 于 2018-05-21 10:48 编辑
  1. [root@120 ~]#
  2. [root@120 ~]# ll /usr/bin/sw
  3. -rwxr-xr-x 1 root root 373 5月  21 10:49 /usr/bin/sw
  4. [root@120 ~]#
  5. [root@120 ~]# whoami
  6. root
  7. [root@120 ~]#
  8. [root@120 ~]# sw
  9. NO      Name
  10. 1       XT5/root
  11. [root@120 ~]#
  12. [root@120 ~]#
  13. [root@120 ~]# sw -u ss
  14. NO      Name
  15. 1       ldapsvr/classes
  16. 2       common/assets
  17. 3       feedback/assets
复制代码

论坛徽章:
8
CU十四周年纪念徽章
日期:2017-08-28 17:16:1915-16赛季CBA联赛之北控
日期:2018-03-29 11:39:0615-16赛季CBA联赛之上海
日期:2018-05-21 10:46:10技术图书徽章
日期:2018-09-03 13:54:18技术图书徽章
日期:2018-09-03 13:54:2815-16赛季CBA联赛之四川
日期:2020-10-15 09:21:4720周年集字徽章-20	
日期:2020-10-28 13:53:0220周年集字徽章-庆
日期:2020-10-28 14:09:12
发表于 2018-05-21 10:50 |显示全部楼层
回复 1# minzyyl

  1. cat /usr/bin/sw


  2. #!/bin/bash

  3. user="$(whoami)"

  4. if [[ $1 == "" ]];then

  5.         find /qs/project/*/*/*/ -maxdepth 1 -type d | awk -F'/' 'BEGIN{print "NO\tName"}$7~/'$user'/{print ++n"\t"$6FS$7}'

  6. elif [[ $1 == "-u" && $2 != "" ]];then

  7.         find /qs/project/*/*/*/ -maxdepth 1 -type d | awk -F'/' 'BEGIN{print "NO\tName"}$7~/'$2'/{print ++n"\t"$6FS$7}'

  8. else

  9.         echo "command error!"
  10.         exit 1

  11. fi
复制代码

论坛徽章:
0
发表于 2018-05-25 00:36 |显示全部楼层

正在测试,非常感谢!

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-05-25 01:40 |显示全部楼层
本帖最后由 1cpuer 于 2018-05-25 02:25 编辑

回复 5# 龙牙地主天


echo "/qs/project/x1/x2/x3/userA/project/cds/.cshrc" | awk -F'/' 'BEGIN{print "NO\tName"}$7~/'$user'/{print ++n"\t"$6FS$7}'
NO    Name
1    x3/userA
$7~/'$user'/{print ++n"\t"$6FS$7}  #第 7 列匹配 $user ...不大理解  
在第 1 个 find 行未加 && source ./*/*/.cshrc

论坛徽章:
0
发表于 2018-05-25 08:29 |显示全部楼层

第2条好像不工作?

2,用户userA接着敲命令:sw module/userA, 则 cd /qs/project/*1/*2/module/userA, 然后再source userA目录下的:/project/cds/.cshrc

论坛徽章:
4
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:2115-16赛季CBA联赛之佛山
日期:2019-02-14 09:26:31
发表于 2018-05-25 08:51 |显示全部楼层
本帖最后由 christmas1102 于 2018-05-25 09:07 编辑

回复 6# minzyyl

这脚本写起来费劲啊

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-05-25 09:36 |显示全部楼层
回复 8# minzyyl

find /qs/project/*/*/*/ -maxdepth 1 -type d | awk -F'/' 'BEGIN{print "NO\tName"}$7~/'$user'/{print ++n"\t"$6FS$7}' && find ./ -iname '.cshrc' -exec source {} \;
估计可行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP