shell 编写一程序,列出当前目录下指定文件的文件名,文件的首行为#!binbash

shell 编写一程序,列出当前目录下指定文件的文件名,文件的首行为#!binbash,第1张

#!/bin/bash

for file in ./*

do

    if test -f $file

    then

        name=`basename $file`

        first_line=`sed '1!d' $file`

        if [ "$first_line" == "#!/bin/bash" ]

        then

            echo $name

        fi

    fi

done

我解释下代码,首先,在for循环中遍历当前目录下的所有文件,然后外层的if判断当前文件类型,如果是文件,则使用basename $file用来获取当前文件的文件名(包括拓展名)并赋值给变量name中,然后使用sed '1!d' $file获取文件第一行的内容并赋值给变量first_line,再在内层的if中判断第一行的内容是否是“#!\bin\bash”,如果是,则打印该文件的文件名。

ps:我也是刚学shell,写了半天才整出来,就当是自己也顺便练手了,哈哈。

我在我电脑上测试了下,没有问题,如果你还有问题请追问。

shell编程:

如果你为每个文件按日期命名的格式都一致的话,那么”ls -l“命令列出的文件列表就是默认按文件名称(日期先后)排序的。那么最后一个就是最新的,文件名可以用以下方式获取。

filename=‘ls -l | tail -n 1 | awk '{print $9}'’

转移文件用 mv 命令即可

逐条解释:

ls -lt /dirname/

列出此目录下的所有文件并按照时间先后排序

grep filename

过滤出包含关键字的文件

head -n 1

查看排名第一的文件

awk '{print $9}'

打印出第九字段,此处为文件名

如果你的文件只是生成不会修改的话,可以这样:

find * -mmin -15 2>/dev/null

如果可能修改,则需要这样(先创建一个 15 分之前的时间戳的文件,然后找比这个文件新的文件):

touch -t $(date -d "15 min ago" +%Y%m%d%H%M) temp.tmp

find * -newer temp.tmp 2>/dev/null

rm -rf temp.tmp


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8010746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存