我需要每秒检查目录树中的文件结构,但我的脚本花了太长时间,因为我怀疑收集时间戳并从中计算base64的名称需要一些时间在大型目录树中。
如何收集树结构,然后将它们存储在数组中,并循环遍历每个文件,在数组中收集它们的时间戳,其中数组键是文件路径的密码?
稍后我将数组与旧版本进行比较,这会增加额外的浪费时间,因此我希望提高效率。
shopt -s globstar dotglob
files=("$base"/**)
new() {
keys=("${!files_new[@]}")
for i in "${keys[@]::2}"
do
unset "files_new[$i]"
done
for file in "${files[@]}"
do
stamp=$(stat -c "%Y" "$file")
hash=$(echo "$file" | base64)
files_new[$hash]=$stamp
done
}
答案 0 :(得分:0)
根据Peter Cordes的建议,我使用Find
命令和-printf
输出实现了更快的探测。循环从3秒到大约300毫秒。
loop() {
while read string
do
stamp=${string%|*}
file=${string#*|}
files_new[$file]=$stamp
done < <(find "${base}" -name "*" -printf "%TD%TT|%p\n")
}