史上最难之我的shell脚本

sh/bash/dash/ksh/zsh等Shell脚本
回复
大鱼游三游
帖子: 6
注册时间: 2019-08-25 15:56
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

史上最难之我的shell脚本

#1

帖子 大鱼游三游 » 2019-08-25 16:28

伤心,断断续续学了块一个月shell脚本了,却处理不了一个目录文件的处理,求助大神帮我解决一下我的困难。十二分感谢。
需求:1.data目录下有若干directory1、directory2、directory3.....等等。
2.directory1、directory2、directory3.....每个directory目录下有若干时间日期命名的目录 20190812、20190813、20190814.....
3.接着时间日期命名的目录 20190812、20190813、20190814.....等每个目录下有四个不同参数命名的目录,比如:640x400_ex70_H、640x400_ex80_L、1280x800_ex40_L、1280x800_ex65_H四个目录,每个目录下四个目录命名参数都有变化。
4.最后需求是我要提取640x400_ex70_H 这个目录下的图片,需要注意是目录名字每个ex参数会不同,其次需要把这个640x400_ex(" ")_H目录下的图片提取 “目录命名为原时间日期命名的目录”最好是另外建一个文件夹提取到新建在文件夹里面,提取后目录应为: 新建目录下/directory/20190812 .jpg
:Cry :Cry
好难啊,留信息比较多,别嫌绕啊大师兄们,帮仔解决一下好吗,现在学习脚本都停了,就整天网上查遍历目录,依然没找到合适方式,俗称没开窍。。。。。。。。。 :Adore :Adore
onlylove
论坛版主
帖子: 4708
注册时间: 2007-01-14 16:23
送出感谢: 1 次
接收感谢: 127 次

Re: 史上最难之我的shell脚本

#2

帖子 onlylove » 2019-08-25 18:04

你停在哪一步了呢?疑问是什么呢?还是单纯的想伸手要个现成的答案呢?
这些用户感谢了作者 onlylove 于这个帖子:
大鱼游三游 (2019-08-25 19:22)
评价: 3.7%
大鱼游三游
帖子: 6
注册时间: 2019-08-25 15:56
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

Re: 史上最难之我的shell脚本

#3

帖子 大鱼游三游 » 2019-08-25 19:06

onlylove 师兄 我希望能有现成的答案 目前脚本大多数我是能看懂的 我就是看一下 多级目录处理 搭配方法和使用命令 挽救一下我受打击的心情 就是断断续续学习一月了 一个目录处理都举措的不知道怎么处理 现在对shell学习都迷茫了
头像
oneleaf
论坛管理员
帖子: 10299
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04
送出感谢: 7 次
接收感谢: 109 次

Re: 史上最难之我的shell脚本

#4

帖子 oneleaf » 2019-08-25 21:38

可以用 find,支持正则表达式。
大鱼游三游
帖子: 6
注册时间: 2019-08-25 15:56
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

Re: 史上最难之我的shell脚本

#5

帖子 大鱼游三游 » 2019-08-26 1:09

谢谢oneleaf 师兄 是个很好的思路 我觉得我就是光看书学习了没有好好学习命令 导致我弱鸡。现在第一步明白了,我遍历$1时用find命令在多级目录下把.jpg提取出来,现在就是在想怎么才能提取到 新建文件夹或目录下,然后提取过来时候。命名规则:新建目录下 /原directory/原20190812/.jpg,还要使用什么命令搭配吗
大鱼游三游
帖子: 6
注册时间: 2019-08-25 15:56
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

Re: 史上最难之我的shell脚本

#6

帖子 大鱼游三游 » 2019-08-26 1:11

求大家帮忙解决一下 千恩万谢了 最好是能帮助我写一个脚本出来 只要能写出来 我就能看懂 也就学习了 后面一定会弥补这个命令没记牢的错误的 谢谢大家
大鱼游三游
帖子: 6
注册时间: 2019-08-25 15:56
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

Re: 史上最难之我的shell脚本

#7

帖子 大鱼游三游 » 2019-08-26 1:13

我最爱的 onlylove 师兄 你怎么不说话了呢 不出来帮仔了吗:Cry
头像
astolia
论坛版主
帖子: 3960
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 651 次

Re: 史上最难之我的shell脚本

#8

帖子 astolia » 2019-08-27 1:53

如果以前没有学习过任何编程语言,直接就上手shell,才断断续续学了一个月,就觉得自己能搞定这个问题,你是不是太过狂妄了?
还搞个哗众取宠的帖子标题,更是惹人厌。
目录遍历最基础的就是用for x in y循环,对于你的需求,老手只用一个就行了,你自己作为新人,用两个嵌套一下也足够了,代码也就10行左右的样子。我就提示到这里了,剩下的自己想去
这些用户感谢了作者 astolia 于这个帖子:
大鱼游三游 (2019-08-27 11:26)
评价: 3.7%
大鱼游三游
帖子: 6
注册时间: 2019-08-25 15:56
系统: ubuntu
送出感谢: 2 次
接收感谢: 0

Re: 史上最难之我的shell脚本

#9

帖子 大鱼游三游 » 2019-08-27 11:32

标题意思是这个需求是我学习史上最难写的一个脚本了,没有其他任何意思。不过特别感谢,起码让我知道我不是最笨的哪个,我一直觉得学了一个月连个目录文件提取都写不出来简直就是白学了,是个笨蛋。我之前没任何编程语言基础。astolia前辈您的意思是:我写两个for循环嵌套一下提取?谢谢提示,谢谢。
头像
oneleaf
论坛管理员
帖子: 10299
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04
送出感谢: 7 次
接收感谢: 109 次

Re: 史上最难之我的shell脚本

#10

帖子 oneleaf » 2019-08-28 10:46

简单的,就是大致这样的框架,剩下的你自己在循环中间截取关键字段,拼凑路径,复制文件

代码: 全选

for file in $(find -name \*.txt); do 
    echo "$file"
done
当然更佳的是这样的框架:

代码: 全选

find . -name '*.txt' -print0 | 
    while IFS= read -r -d '' file; do 
        echo "$file"
    done
头像
astolia
论坛版主
帖子: 3960
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 651 次

Re: 史上最难之我的shell脚本

#11

帖子 astolia » 2019-08-29 0:07

oneleaf 写了:
2019-08-28 10:46
简单的,就是大致这样的框架,剩下的你自己在循环中间截取关键字段,拼凑路径,复制文件

代码: 全选

for file in $(find -name \*.txt); do 
    echo "$file"
done
当然更佳的是这样的框架:

代码: 全选

find . -name '*.txt' -print0 | 
    while IFS= read -r -d '' file; do 
        echo "$file"
    done
你就是把问题复杂化,对一个初学编程的新人,扔出那么多额外的东西,除了把人弄得更糊涂之外还能干啥?炫技也不是这么炫的。
对他的需求,除了for in循环之外,只靠最基本的cd、mv和mkdir三个命令就能搞定。
头像
astolia
论坛版主
帖子: 3960
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 651 次

Re: 史上最难之我的shell脚本

#12

帖子 astolia » 2019-08-29 0:54

大鱼游三游 写了:
2019-08-27 11:32
astolia前辈您的意思是:我写两个for循环嵌套一下提取?谢谢提示,谢谢。
先问问你自己:
学过for x in y这种循环吗?弄明白它的运作机制了吗?
学过变量吗?知道变量最基础的用法了吗?
学过通配符*吗?知道它的匹配机制吗

只要这三个都弄明白了,加上最基本的cd、mv和mkdir命令,就可以实现你的需求
大鱼游三游 写了:
2019-08-27 11:32
不过特别感谢,起码让我知道我不是最笨的哪个,我一直觉得学了一个月连个目录文件提取都写不出来简直就是白学了,是个笨蛋。
大部分shell编程的教材针对的对象都是有一定编程基础的人,很多基本的概念上不会解释太多。如果你学习的教程里没有详细说明变量、循环这些概念,即使是号称零基础的,你也不要傻乎乎地跟着学。如果实在找不到合适的教程,拿其他编程语言的书去看也是可以的,基础概念都是相通的。
回复

回到 “Shell脚本”