実際にファイル名をリストすることもできますが、そこから不要なものがたくさん出てきます。
> echo "ls *.txt" | sftp user@Host:/dir
Connected to 1.1.1.1.
Changing to: /dir
sftp> ls *.txt
1.txt
2.txt
3.txt
ファイルとファイルのみを一覧表示する実績のある/信頼できる方法はありますか?可能であればhead
のようなフィルターの使用を避けたいです。
-q
オプションを使用して、sftp
がq uietになるように指示します。これにより、気にしない出力のほとんどが抑制されます。
echo "ls *.txt" | sftp -q [email protected]:/path
エコーする対話型プロンプトの行は引き続き表示されます。 g。 sftp> ls *.txt
、ただしgrep -v
を使用してこれらを除外できます。
echo "ls *.txt" | sftp -q [email protected]:/path | grep -v '^sftp>'
余談ですが、バッチファイルを使用し、-b
パラメータを使用して、パイプラインをsftp
ingするのではなく、echo
に渡すことをお勧めします。
もしあなたが本当にやりたいことがファイルのリストを取得することであるならば、これは実際には、ssh
よりもsftp
の方が効果的です(結局、iss ecure f ilet ransferp rogram):
ssh [email protected] ls -1 /path
[〜#〜] sshfs [〜#〜] を使用してリモートディレクトリツリーをマウントします。 SSHFSは、SFTPプロトコルを使用してリモートファイルにアクセスするリモートファイルシステムです。サーバーがSFTPアクセスを許可している場合は、SSHFSを使用できます(サーバーの観点からは、同じことです)。クライアント側では、 Fuse の使用を承認する必要があります。これは、最近のほとんどのuniceに当てはまります。
ファイルシステムをマウントしたら、ファイルが実際にリモートであることを気にすることなく、通常のコマンドをすべて使用できます。
mkdir Host-dir
sshfs user@Host:/dir Host-dir
echo Host-dir/*.txt
…
fusermount -u Host-dir
sftp -q user@Host:/dir <<<"ls *.txt" | grep -v '^sftp>`
しかし、これはsftpがパスワードを要求しない場合にのみ機能します。 grep -vが原因で、パスワードを要求するときにsftpに影響します。
しかし、テールを使用する場合、それは多くの場合単純であると思います。
sftp -q user@Host:/dir <<<"ls *.txt" | tail -n+2