shell脚本获取主机上某个目录下的文件信息

最近要完成获取主机上某个目录下的文件信息的需求,因此写完后在这里记录一下,参考文章放在文末。(旧脚本存在当目录下文件数较多时,执行时间较慢的问题,04-24已优化更新)

大致步骤如下:

#!/bin/bash
###进入该目录,并将该目录下的文件信息循环遍历保存到数组中
cd "${path}"
for file in $(ls -p | grep -v /)
do
  filelist[$c]=$file
  ((c++))
done
###判断数组是否为空,为空则说明该目录下没有文件
if [ ! -n "$filelist" ]; then
  echo "IS NULL"
  exit 1
fi

###组装需要输出的信息,每行输出内容从左到右依次是文件大小、文件时间、文件名,并在每个输出项之间加上分割符:@sss@
###删除前、后空格,不删除中间空格 sed -e 's/^[ \t]*//g' -e 's/[ \t]*$//g'

b=0
while [ $b -lt $c ]
do
   fileTimeAndName=$(ls -l --time-style '+%Y%m%d%H%M%S'| awk '{$1="";$2="";$3="";$4="";print $0}'|grep ${filelist[$b]}|sed -e 's/^[ \t]*//g' -e 's/[ \t]*$//g'|sed -e 's/[ ][ ]*/@sss@/g')
   filelist[$b]=${fileTimeAndName}
   echo ${filelist[$b]}
  ((b++))
done

-----2022-04-24更新:

原脚本因循环遍历过多执行效率较低,优化后如下:

优化内容:判断主机上新增是否存在该路径;优化执行逻辑,提高脚本执行效率

#!/bin/bash

if [ ! -d "${path}" ]; then
  echo "IS NULL"
  exit 1
fi

cd "${path}"
for file in $(ls -p | grep -v /)
do
  filelist[$c]=$file
  ((c++))
done

if [ ! -n "$filelist" ]; then
  echo "IS NULL"
  exit 1
fi

for fileDetail in $(ls -l --time-style '+%Y%m%d%H%M%S'|grep -v ^d | awk '{$1="";$2="";$3="";$4="";print $0}'|sed -e 's/^[ \t]*//g' -e 's/[ \t]*$//g'|sed -e 's/[ ][ ]*/@sss@/g')
do
  echo $fileDetail
  ((c++))
done

相关参考链接(排名不分先后):

获取sh脚本运行时间 - IIIID - 博客园 (cnblogs.com)

shell判断一个变量是否为空方法总结_Linux_脚本之家 (jb51.net)

Shell 变量 | 菜鸟教程 (runoob.com)

linux shell 中的数组的取值 遍历 替换 删除操作 - Rich七哥 - 博客园 (cnblogs.com)

(2条消息) linux shell数组赋值方法_bing.shao的博客-CSDN博客_shell数组赋值

(2条消息) 在shell中把ls的输出存进一个数组变量中_树静丶风止的博客-CSDN博客_bash ls 数组

shell 将文件名读入数组 - michaelchengjl - 博客园 (cnblogs.com)
原文链接: https://www.cnblogs.com/Oxyy/p/16138943.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/188689

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午2:22
下一篇 2023年2月12日 下午2:22

相关推荐