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

이것은 잘 작동합니다.

관련 정보