如何解决如何保存`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 here
,while 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 举报,一经查实,本站将立刻删除。