Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69221
  • 博文数量: 24
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-03 10:47
文章分类
文章存档

2011年(1)

2010年(1)

2009年(22)

我的朋友

分类:

2009-09-18 13:29:05

我知道这样做的目的,新手要是学shell脚本,每次都输入命令增加权限很不方便,有了这样一个脚本每次运行一下就很方便了。

第一中解决办法:

ls -lt|sed -e'2!d'|awk '{print $8}'

可以看出不是很恰当,只是找出了文件(还不一定是shell脚本文件)

第二种解决办法:

chmod u+x $(file $(ls -t ) |sed -ne '/shell script text  executable/p'|sed -e 's/://'|awk '{print $1}' |sed -n '1p')


    感觉很长,用了sed 和 awk 。
    我觉得很好的地方是把 ls -t 的结果直接传递给了 sed 来查找 "shell script text excutable" 这一行,这样在查找的时候就很准确,其实也可以用 grep 来代替。
    这里有一个bug。" ls -t "如果是今天早上和昨天晚上都在同一个目录下编辑过文件,这样ls -t之后第一个会是昨天晚上编辑过的那个文件。所以我像下面这样写:

#!/bin/bash

files=`ls -l | sort -k6,7 -r| awk '{print $8}'`

for subfile in $files

do

     file "$subfile" | grep "executable" > /dev/null

     if [ $? -eq 0 ];then

           chmod u+x -v "$subfile"

           exit 0 fi

done


用 ls -l | sort -k6,7 -r 来得到正确的排序(以第六列为主键,排序第7列)


     在实际应用中发现,这里的第二种解法的完美的,在 ls -t 的时候实际就已经按照日期最新的排到前面了。
阅读(3051) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~