快速检查目录树中文件的时间戳

时间:2016-02-08 07:20:25

标签: linux bash performance tree

我需要每秒检查目录树中的文件结构,但我的脚本花了太长时间,因为我怀疑收集时间戳并从中计算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   
}

1 个答案:

答案 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")
}