微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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脚本,当文件名有空格时,如my file herewhile read FILE效果不好。

我已经读过类似的 post1,post2,我知道循环查找的输出是不好的做法。问题是我需要先保存 find -exec 结果 acl_file_old。>

如何保存find -exec结果并用于比较FILE OWNER,不管文件名是否有空格?

解决方法

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

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

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

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

它有更多花哨的字符,无论如何都会被打破。也许对于 (空格)它可以解决问题?

,

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

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

并使用 IFS=";" 从中读取:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。