![RedHat 6은 ssh, rsync 및 find를 통해 파일을 복사합니다.](https://linux55.com/image/173612/RedHat%206%EC%9D%80%20ssh%2C%20rsync%20%EB%B0%8F%20find%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B3%B5%EC%82%AC%ED%95%A9%EB%8B%88%EB%8B%A4..png)
이 방법으로 원격 서버에서 파일을 복사하려고 합니다.
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
이것은 잘 작동합니다.