sftpコマンドを使用してリモートディレクトリのファイル数を取得する方法

sftpコマンドを使用してリモートディレクトリのファイル数を取得する方法

SFTPサーバーがあります([Eメール保護])。それに接続して、以下を含むファイルを検索しようとしています。。 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

関連情報