From d4e70de6aba0fb604c8912c44bae15144f41198f Mon Sep 17 00:00:00 2001 From: meo Date: Sat, 14 Dec 2024 12:03:23 +0100 Subject: [PATCH] fix(perf): going to `stat` remove `lsattr` macOS The command `lsattr` is not supported on macOS so I have remove it switch to `stat` instead of `ls` for better performance and no subshell use of parameter expansion with `%` in place of `awk` for performance and no subshell --- zfs-inplace-rebalancing.sh | 41 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/zfs-inplace-rebalancing.sh b/zfs-inplace-rebalancing.sh index 84387e7..ad0ae53 100755 --- a/zfs-inplace-rebalancing.sh +++ b/zfs-inplace-rebalancing.sh @@ -137,37 +137,38 @@ function rebalance() { # Linux # file attributes - original_md5=$(lsattr "${file_path}" | awk '{print $1}') - # file permissions, owner, group - # shellcheck disable=SC2012 - original_md5="${original_md5} $(ls -lha "${file_path}" | awk '{print $1 " " $3 " " $4}')" + original_md5=$(lsattr "${file_path}") + # remove anything after the last space + original_md5=${original_md5% *} + # file permissions, owner, group, size, modification time + original_md5="${original_md5} $(stat -c "%A %U %G %s %Y" "${file_path}")" # file content - original_md5="${original_md5} $(md5sum -b "${file_path}" | awk '{print $1}')" + original_md5="${original_md5} $(md5sum -b "${file_path}")" + # file attributes - copy_md5=$(lsattr "${tmp_file_path}" | awk '{print $1}') - # file permissions, owner, group - # shellcheck disable=SC2012 - copy_md5="${copy_md5} $(ls -lha "${tmp_file_path}" | awk '{print $1 " " $3 " " $4}')" + copy_md5=$(lsattr "${tmp_file_path}") + # remove anything after the last space + copy_md5=${copy_md5% *} + # file permissions, owner, group, size, modification time + copy_md5="${copy_md5} $(stat -c "%A %U %G %s %Y" "${tmp_file_path}")" # file content - copy_md5="${copy_md5} $(md5sum -b "${tmp_file_path}" | awk '{print $1}')" + copy_md5="${copy_md5} $(md5sum -b "${tmp_file_path}")" + # remove the temporary extension + copy_md5=${copy_md5%"${tmp_extension}"} elif [[ "${OSTYPE}" == "darwin"* ]] || [[ "${OSTYPE}" == "freebsd"* ]]; then # Mac OS # FreeBSD - # file attributes - original_md5=$(lsattr "${file_path}" | awk '{print $1}') - # file permissions, owner, group - # shellcheck disable=SC2012 - original_md5="${original_md5} $(ls -lha "${file_path}" | awk '{print $1 " " $3 " " $4}')" + # note: no lsattr on Mac OS or FreeBSD + + # file permissions, owner, group size, modification time + original_md5="${original_md5} $(stat -f "%Sp %Su %Sg %z %m" "${file_path}")" # file content original_md5="${original_md5} $(md5 -q "${file_path}")" - # file attributes - copy_md5=$(lsattr "${tmp_file_path}" | awk '{print $1}') - # file permissions, owner, group - # shellcheck disable=SC2012 - copy_md5="${copy_md5} $(ls -lha "${tmp_file_path}" | awk '{print $1 " " $3 " " $4}')" + # file permissions, owner, group size, modification time + copy_md5="${copy_md5} $(stat -f "%Sp %Su %Sg %z %m" "${tmp_file_path}")" # file content copy_md5="${copy_md5} $(md5 -q "${tmp_file_path}")" else