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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)