RedHat 6 は ssh、rsync、find を介してファイルをコピーします。

RedHat 6 は ssh、rsync、find を介してファイルをコピーします。

この方法でリモートサーバーからファイルをコピーしようとします。

transferFiles() {
    for FILE in `ssh $USERNAME@$HOSTNAME find "${DIR}" -type f -mtime -1 -name "*log*" 2>/dev/null` ; do
        rsync -zR $USERNAME@$HOSTNAME:$FILE "${DIRII}"
    done
}

「log」を含むすべてのファイルをコピーしたいです。

残念ながら何かが動作しません。問題は引用符にあるようです。多くの解決策を試しましたが、まだ何もありません。

申し訳ありません。私は十分に詳細に説明できませんでした。echo $FILEループ内でこの変数に何かが送信されていることを確認しようとします。 echoには何も表示されないので、最初の行に問題があるとします。また、直接実行しようとしました。

ssh $USERNAME@$HOSTNAME find "${DIR}" -type f -mtime -1 -name "*log*"| less

ただし、出力は空です。この場合の解決策は、単一引用符内に find を挿入することです。

ssh $USERNAME@$HOSTNAME 'find "${DIR}" -type f -mtime -1 -name "*log*"'| less

これは動作中です。しかし、今私の質問はこれをスクリプトに適用する方法です。私はこれを行うことはできません:

transferFiles() {
    for FILE in `ssh $USERNAME@$HOSTNAME 'find "${DIR}" -type f -mtime -1 -name "*log*"' 2>/dev/null` ; do
        rsync -zR $USERNAME@$HOSTNAME:$FILE "${DIRII}"
    done
}

また、sshとfindの単一引用符に加えて、二重引用符も試してみました。相互参照" ' ' "もこの問題を解決しません。

答え1

それで、ついに解決策を見つけました。問題はバックスラッシュがないということです。 \-name "*log*"' この場合、検索全体に一重引用符は必要ありません。

ssh $USERNAME@$HOSTNAME find "${DIR}" -type f -mtime -1 -name "\*log*"| less

これはうまくいきます。

関連情報