SFTP를 사용하여 원격 서버에서 내 서버로 파일을 복사할 때만 if 함수를 사용하여 필요한 파일을 필터링해야 합니다. 이것은 내부의 모든 데이터를 얻으려는 나의 시도입니다 /filesnew
.
#!/bin/bash
files=`sshpass -p 'XXX' sftp -P 2222 [email protected]<<EOF
cd /filesnew
ls
EOF`
files=`echo $files|sed "s/.*sftp> ls//"`
(
echo cd /filesnew
for file in $files; do
echo get $file /data/processedfiles/$file
done
) |sshpass -p 'XXX' sftp -P 2222 [email protected]
필터링 해야 합니다 "USER"
.
ex:
If($files==*USER*) then
echo get $file /data/processedfiles/$file
누군가 이 작업을 수행하는 방법을 말해 줄 수 있습니까?
답변1
sftp
패턴( /filesnew/USER*
디렉토리에서 리터럴 문자열로 시작하는 파일 이름)과 일치하는 모든 파일을 가져오고 이를 디렉터리에 로컬로 저장하는 데 사용됩니다 .USER
/filesnew
/data/processedfiles
mkdir -p /data/processedfiles || exit
sftp -P 2222 [email protected] <<'END_SFTP'
get /filesnew/USER* /data/processedfiles
END_SFTP
이러한 파일을 나열할 이유가 없습니다. 또한 localhost의 대상 파일 이름을 언급할 필요가 없으며 대상 디렉터리만 현재 디렉터리와 다른 경우에만 언급할 수 있습니다.
mkdir
로컬 대상 디렉터리가 항상 존재한다고 확신하는 경우 초기 명령을 건너뛸 수 있습니다.
참고로, 이는 쉘의 함수가 아니라 "문"의 일부인 if
"예약어" 라는 점을 언급할 가치가 있을 것입니다.if