나는 아래에 내 자신의 대답을 제공했습니다.
SFTP를 사용하여 제대로 작동하는 여러 bash 스크립트가 있습니다. 제가 하고 싶은 것은 단순히 폴더의 ls 또는 dir을 SFTP 서버의 파일로 리디렉션하는 것입니다.
cron 작업으로 실행하거나 수동으로 실행할 수 있습니다. 원격 서버의 파일 목록을 볼 수 있지만 원격 서버에서 로컬 서버로의 파일 목록을 텍스트 파일로 생성하고 싶습니다. .
이것이 내가 지금까지 bash 스크립트에 대해 알고 있는 것입니다. 아래 나열된 네 번째 에코는 문제가 있는 줄입니다.
#!/bin/bash
localpath=/home/localacct/somepath
remotelocation=/home/account/logs/archive
remotehost=' [email protected]'
echo > $localpath/list.sftp
echo "cd $remotelocation " >> $localpath/list.sftp
echo "dir *.* " >> $localpath/list.sftp
echo "dir *.* > $localpath/dirlist.txt " >> $localpath/list.sftp
echo "bye " >> $localpath/list.sftp
sftp -b $localpath/list.sftp $remotehost
exit
답변1
명령은 sftp
매우 제한적입니다. 원하는 작업을 수행할 수 없는 경우 다른 접근 방식을 사용할 수 있습니다.SSHFS파일 시스템. SSHFS는 SFTP를 전송 프로토콜로 사용하므로 서버 측에는 SFTP 클라이언트가 하나만 표시됩니다. 사용할 수 있어야 합니다.퓨즈클라이언트 측에서.
SSHFS를 사용하면 원격 디렉터리를 기존의 빈 디렉터리에 마운트하고 일반 명령을 사용할 수 있습니다.
mkdir remote
sshfs "$remotehost:$remotelocation" remote
cd remote
echo *.* >"$localpath/dirlist.txt"
fusermount -u remote
rmdir remote
답변2
이것은 지금까지 최고의 것입니다:
echo 'ls' | sftp hostname
다음을 통해 출력을 파일로 전달할 수 있습니다.
echo 'ls' | sftp hostname > /tmp/mylist.txt
답변3
dir
클라이언트 내의 명령은 sftp
리디렉션을 지원하지 않습니다. 아래 예에서는 아무 작업도 수행하지 않는 방법을 보여줍니다.
sftp> pwd
Remote working directory: /var/tmp/foodir
sftp> lcd /var/tmp/foodir
sftp> dir *.*
foo.txt
sftp> dir *.* >dirlist.txt
foo.txt
sftp> dir
foo.txt
sftp>
매뉴얼 페이지sftp
확인하다.
ls
[-1afhlnrSt
] [path
]원격 디렉토리 목록 표시
path
또는 현재 디렉토리인 경우path
명시되지 않은.path
glob(3) 문자를 포함할 수 있으며 여러 파일과 일치할 수 있습니다.다음 징후가 인식되어 행동이 변경됩니다.
ls
그러므로:
-1
단일 출력 열을 생성합니다.
-a
점(' ')으로
.
시작하는 파일을 나열합니다.-f
목록을 정렬하지 마세요. 기본 정렬 순서는 사전 순서입니다.
-h
긴 형식 옵션과 함께 사용하는 경우 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트, 페타바이트 및 엑사바이트 단위 접미사를 사용하여 2의 거듭제곱을 사용하여 비트 수를 변환합니다. 4자리 이하로 줄입니다(K=1024, M =1048576 등).
-l
권한 및 소유권 정보를 포함한 추가 세부정보를 표시합니다.
-n
사용자 및 그룹 정보를 숫자 형식으로 포함하는 긴 목록을 생성합니다.
-r
목록의 정렬 순서를 반대로 바꿉니다.
-S
파일 크기별로 목록을 정렬합니다.
-t
마지막 수정 시간을 기준으로 목록을 정렬합니다.
답변4
다음을 사용할 수도 있습니다 lftp
.
lftp -c 'connect sftp://user:password@host/dir; ls' > list.txt
또는
lftp -e 'ls;quit' sftp://user:password@host/dir > list.txt
lftp
find
재귀 목록에 대한 명령 도 있습니다 .
명령줄에서 비밀번호를 전달하는 것은 일반적으로 좋지 않은 생각입니다. 또 다른 접근 방식은 가능하면 SSH 키 인증을 사용하는 것입니다(키 인증이 가능한 경우 위의 비밀번호는 무시되므로 빈 문자열로 설정합니다). 또는 환경을 통해 전달할 수도 있습니다.
LFTP_PASSWORD=password lftp --env-password -e 'ls;quit' \
sftp://user:password@host/dir > file.list
또는 여기에 설명된 대로 stdin을 통해 명령을 전달합니다(셸에 따라 삭제된 임시 파일 또는 파이프를 사용하여 구현됨).
lftp <<'EOF' > file.list
connect sftp://user:password@host/dir
ls
EOF