web-dev-qa-db-ja.com

SFTP経由でファイルとファイルのみを一覧表示する方法は?

実際にファイル名をリストすることもできますが、そこから不要なものがたくさん出てきます。

> 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のようなフィルターの使用を避けたいです。

8
Pavel Vlasov

-qオプションを使用して、sftpq 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パラメータを使用して、パイプラインをsftpingするのではなく、echoに渡すことをお勧めします。

もしあなたが本当にやりたいことがファイルのリストを取得することであるならば、これは実際には、sshよりもsftpの方が効果的です(結局、iss ecure f ilet ransferp rogram):

ssh [email protected] ls -1 /path
9
DopeGhoti

[〜#〜] 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