これはどう?
#!/bin/bash
user="user"
host="remote_host"
while read file
do
permission=$(stat -c %a $file) # retrieve permission
owner=$(stat -c %U $file) # retrieve owner
group=$(stat -c %G $file) # retrieve group
# just for debugging
echo "$file@local: p = $permission, o = $owner, g = $group"
# copy the permission
ssh $user@$host "chmod $permission $file" < /dev/null
# copy both owner and group
ssh $user@$host "chown $owner:$group $file" < /dev/null
done < list.txt
ファイルのリストは「list.txt」に保存されていると想定しています。
さらに、セットアップに応じて変数「user」と「host」を設定する必要があります。
「自動ログイン」を使用するようにsshを構成することをお勧めします。それ以外の場合は、ループごとにパスワードを 2 回挿入する必要があります。これは、パスワードなしでこの SSH ログインを行うための優れたチュートリアルです。
ssh 接続を 1 つだけ確立し、ディレクトリに再帰オプションを使用する別のソリューション (コメントで質問されているとおり) は次のとおりです。
#!/bin/bash
user="user"
host="remote_host"
cat list.txt | xargs stat -c "%n %a %U:%G" | ssh $user@$host '
while read file chmod_par chown_par
do
# $file contains %n
# $chmod_par contains %a
# $chown_par contains %U:%G
if [ -d $file ]; then
chmod -R $chmod_par $file
chown -R $chown_par $file
else
chmod $chmod_par $file
chown $chown_par $file
fi
done'