sftp 명령을 사용하여 원격 디렉토리에 있는 파일 수를 얻는 방법

sftp 명령을 사용하여 원격 디렉토리에 있는 파일 수를 얻는 방법

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.

관련 정보