最近要完成獲取主機上某個目錄下的文件信息的需求,因此寫完后在這里記錄一下,參考文章放在文末。(舊腳本存在當目錄下文件數較多時,執行時間較慢的問題,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)
linux shell 中的數組的取值 遍歷 替換 刪除操作 - Rich七哥 - 博客園 (cnblogs.com)
(2條消息) linux shell數組賦值方法_bing.shao的博客-CSDN博客_shell數組賦值