如何使用 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不会分叉 shell,因此您无法在那里使用常用命令。假设您也可以通过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

相关内容