0

興味深い問題があります。混合モードをサポートする NAS デバイスがあります。その上のファイルはすべてごちゃ混ぜになっており、NTFS スタイルの ACL を持つものと UNIX スタイルのアクセス許可を持つものがあります。その NAS デバイスから混合アクセス許可をサポートする別のデバイスにデータを移行しましたが、移行方法により、すべてのアクセス許可が NTFS スタイルの ACL になっています。元のソース データから UNIX 権限をコピーし、それらを宛先データに適用したいと考えています。ここに疑似コードがあります

Windows ファイルでない場合 (所有者の GID と UID != 99)、各ファイルとディレクトリに対して再帰的にマウント ポイントを下ります

この時点で、4 行のうちの 2 行目に問題があります。

検索を使用して再帰し、返された各エントリに対してスクリプトを実行しています。検索コマンドは次のとおりです。

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