如何保存 `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 here
,while 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
(您也可以使用 ;
以外的字符)
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 here
,while 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
(您也可以使用 ;
以外的字符)