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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM