나는 이것을 작동하고 있습니다 :
% cat read.sh
!/bin/sh
file=list.txt
while read line
do
echo "$line"
cut -d' ' -f27 | sed -n '$p' > file2
done < "$file"
% cat list.txt
sftp> #!/bin/sh
sftp>
sftp> cd u/aaa
sftp> ls -lrt x_*.csv
-rwxr-xr-x 0 1001 1001 12274972 May 13 21:07 x_20150501.csv
-rw-r--r-- 0 1001 1001 0 May 13 21:44 x_20150601.csv
-rw-r--r-- 0 1001 1001 0 May 13 21:44 x_20150701.csv
-rw-r--r-- 0 1001 1001 0 May 13 21:44 x_20150801.csv
-rw-r--r-- 0 1001 1001 0 May 13 21:44 x_20150901.csv
-rw-r--r-- 0 1001 1001 0 May 13 21:45 x_20151001.csv
-rw-r--r-- 0 1001 1001 0 May 13 21:45 x_20151101.csv
-rw-r--r-- 0 1001 1001 0 May 13 21:45 x_20151201.csv
% cat file2
x_20151201.csv
첫 번째 질문: 마지막 줄의 마지막 항목을 읽는 것보다 더 흥미로운 것이 있습니까? Cut과 sed를 사용하는 방법을 알고 있나요? 이는 sftp 디렉토리 목록의 리디렉션입니다.
두 번째 질문: file2에 무엇이 있든, sftp 배치 파일에서 읽어서 정확한 파일을 얻고 싶습니다.
% cat fetch.sh
#!/bin/sh
cd u/aaa
!sh read.sh
!< file2
get
bye
get
상상할 수 있듯이 sftp는 파일 없이 서비스를 제공하는 것을 좋아하지 않습니다 . 그렇다면 sftp 서버에서 파일을 가져오기 위해 file2를 어떻게 읽어야 할까요?
% sftp -b fetch.sh user@pulse
sftp> #!/bin/sh
sftp>
sftp> cd u/aaa
sftp> !sh read.sh
sftp> #!/bin/sh
sftp> !< file2
x_20151201.csv
sftp> get
You must specify at least one path after a get command.
답변1
모든 작업을 하나의 명령으로 결합할 수 있습니다.
sftp user@host:/path/to/file/$(tail -1 file1.txt |tr -s ' ' |cut -d ' ' -f 9)
그러면 현재 작업 디렉터리에 파일이 추출됩니다. 파일을 다른 디렉토리에 추출해야 하는 경우 대상 디렉토리를 sftp 명령의 다음 인수로 지정하십시오.