興味深い問題があります。混合モードをサポートする 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"