0

我有一个有趣的问题。我有一个支持混合模式的 NAS 设备:上面的文件都乱七八糟,有些带有 NTFS 样式的 ACL,有些带有 UNIX 样式的权限。我已将数据从该 NAS 设备迁移到另一个支持混合权限的设备,并且由于我迁移的方式,所有权限都在 NTFS 样式的 ACL 中。我想从原始源数据复制 UNIX 权限并将它们应用于目标数据。这是伪代码

对于每个文件和目录,如果它不是 Windows 文件(所有者 GID 和 UID != 99),则递归地向下挂载点读取权限、UID 和 GID 并将它们写入具有文件名的文件将这些权限应用于目标数据

在这一点上,我在这 4 行中的第二行遇到了麻烦。

我正在使用 find 进行递归,然后针对返回的每个条目运行一个脚本。查找命令是:

find /mnt/test -exec /home/permchange2 \{\} \;

脚本 /home/permchange2 在下面。问题是,当我将 IF 语句留在那里时,我只会将输出输出到屏幕上,没有任何文件可以归档。当我将其注释掉时,一切都会像我想要的那样进入文件,但它包括我不想要的 gid=99 和 uid=99 的文件。我的 IF 语句一定有问题,但我不知道是什么....

#!/bin/bash

date=`date +%m-%d-%H%M%S`
outfile=/home/perms-${date}.log

#get uid and gid exclude windows files
uid=$(stat "$1" | grep "Access: (" | awk -F[\(\/]  '{print $4}' | awk '{sub(/^[ \t]+/, "")};1')
gid=$(stat "$1" | grep "Access: (" | awk -F[\(\/]  '{print $6}' | awk '{sub(/^[ \t]+/, "")};1')
echo "uid="$uid
echo "gid="$gid
if [[ uid==99 && gid==99 ]]; then
        exit 0;
fi

#write the filename
echo $1 >> $outfile

#get permissions
stat "$1" | grep "Access: (" | awk -F[\(\/]  '{print $2}' >> $outfile

#write out uid
echo $uid >> $outfile

#write out gid
echo $gid >> $outfile

#echo newline
echo -e "\n"
4

0 回答 0