
SFTP 서버가 있습니다([이메일 보호됨]). 그것에 연결하여 다음을 포함하는 파일을 검색하려고 합니다.. txt경로(/files/base/incomming)에서 (.txt)를 포함하는 각 파일의 줄 수를 가져옵니다. 다음 명령을 사용하여 이를 달성하려고 시도했지만 잘못된 명령으로 발생했습니다.
echo "wc -l *.txt*"|sftp -q [email protected]:/files/base/incomming
o/p
sftp>
invalid command
이 문제를 해결할 방법이 있나요?
답변1
sftp
쉘은 포크되지 않으므로 일반적인 명령을 사용할 수 없습니다. 통과할 수 있다고 가정하면 ssh
다음을 사용할 수 있습니다.
ssh [email protected] 'ls /files/base/incomming/*.txt' | wc -l
또는
ssh [email protected] 'ls /files/base/incomming/*.txt | wc -l'
질문에 설명된 작업을 완료하세요.
(어떤 이유로든) 사용하려면 sftp
해당 명령 중 하나를 사용해야 합니다 ( 상대방이 와일드카드를 처리하는 방법을 알고 있기를 ftp
바랍니다 ).ftpd
echo 'ls -l /files/base/incomming/*.txt' | sftp [email protected] | wc -l
답변2
파일 수가 너무 많지 않으면 globbing을 사용하여 일치하는 각 파일 이름에 위치 인수를 설정한 다음 개수를 에코할 수 있습니다.
count=$(ssh [email protected]
'set -- /files/base/incomming/*.txt; echo "$#"')
아니면 파일 개수가예크다(하지만 다음보다 작다.uintmax_t
), GNU find(확장용)가 있으면 -printf
다음을 사용할 수 있습니다.스티븐에게서 본 트릭:
count=$(ssh [email protected]
'find /files/base/incomming -maxdepth 1 -type f -name '*.txt' -printf . | wc -c')
위의 find
명령은 지정된 디렉터리에 대해 명령을 실행하고 깊이를 해당 디렉터리로 제한하며 -type f
이름이 .txt
;로 끝나는 일반 파일( )로 일치 항목을 제한합니다. 각 일치 항목에 대해 마침표가 인쇄되고 총계는 wc -c
명령이 대체되어 반환된 할당에서 계산됩니다 count
.