如何用shell编程打印出目录下的所有文件内容?

如何用shell编程打印出目录下的所有文件内容?,第1张

1)看下面的脚本a1.sh,假设要显示目录/home/user/tmp/下面的所有的文件和(子)目录的名字:

$ cat a1.sh

#!/bin/bash

for file in /home/user/tmp/*

do

echo $file

done

2)假设目录/home/user/tmp/下面的所有的文件和(子)目录如下:

$ ls

1.txt 2.txt a1.sh a.sh b.sh email_back m1.doc tmp

3)运行脚本:

$ a1.sh (或者./a1.sh)

/home/user/tmp/1.txt

/home/user/tmp/2.txt

/home/user/tmp/a1.sh

/home/user/tmp/a.sh

/home/user/tmp/b.sh

/home/user/tmp/email_back

/home/user/tmp/m1.doc

/home/user/tmp/tmp

4)脚本a1.sh的作用只是显示文件和子目录的列表,要显示文件的内容,脚本继续改造,内容如下,看脚本a2.sh:

$ cat a2.sh

#!/bin/bash

for file in /home/shiqingd/tmp/*

do

echo $file

if [ -f $file ]then

cat $file

fi

done

脚本a2.sh可以达到目的。

#!/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,写了半天才整出来,就当是自己也顺便练手了,哈哈。

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

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

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/11910179.html

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

发表评论

登录后才能评论

评论列表(0条)

保存