如何保存 `find -exec` 结果并用于比较 `FILE OWNER`,而不考虑白色 space 文件名?

How to save `find -exec` result and used to compare `FILE OWNER`,regardless white space file name?

find . -depth -exec stat --format '%n %U %G' {} + | sort -d > acl_file_old
#some days later,do it again,and then compare
find . -depth -exec stat --format '%n %U %G' {} + | sort -d > acl_file_new
while read FILE OWNER GROUP; do
    while read FILE_NEW OWNER_NEW GROUP_NEW; do
    if [[ $FILE == $FILE_NEW ]]; then
    echo "$FILE"
    break
    done < $result_dir/acl_file_new
done < $result_dir/acl_file_old

运行以上bash脚本,当文件名有白色space时,如my file herewhile read FILE效果不佳。

我已经读过类似的 post1,post2,我知道循环查找的输出是错误的 practice.The 问题是我需要先保存 find -exec 结果 acl_file_old

如何保存find -exec结果并用于比较FILE OWNER,不管白色space文件名?

读取命令将行中找到的单词分配给变量。

请注意,最后一个变量分配了直到行尾的所有字符。

第一个速战速决是更改顺序并确保文件名位于末尾 ... -exec stat --format '%U %G %n' {} + ...

然后把变量的顺序改成while read -r OWNER GROUP FILE ; do ...

如果有更多花哨的字符,无论如何都会被破坏。也许对于 (space) 它会成功吗?

您可以在写入文件时更改分隔符:

find . -depth -exec stat --format '%n;%U;%G' {} + | sort -d > file

并使用IFS=";"读取它:

while IFS=";"; read FILE OWNER GROUP; do
echo $FILE
done < file

(您也可以使用 ; 以外的字符)