Shell-Script

如何使用 sftp 命令獲取遠端目錄中存在的文件的計數

  • July 6, 2019

我有一個 sftp 伺服器 (Dbprd@101.102.130.23)。我正在嘗試連接到它並在 (/files/base/incomming) 路徑中搜尋包含*.txt*的文件,並獲取每個包含 (.txt) 的文件中的行數。我試圖使用以下命令來實現,但它作為無效命令拋出:

echo "wc -l *.txt*"|sftp -q Dbprd@101.102.130.23:/files/base/incomming

o/p
sftp>
invalid command 

有什麼辦法可以解決這個問題嗎?

如果文件的數量不是太大,您可以使用 globbing 將位置參數設置為每個匹配的文件名,然後回顯計數:

count=$(ssh Dbprd@101.102.130.23 
       'set -- /files/base/incomming/*.txt; echo "$#"')

或者,如果文件數量很大(但小於uintmax_t),並且您有 GNU find(用於-printf擴展),那麼您可以使用我從 Stéphane 看到的技巧

count=$(ssh Dbprd@101.102.130.23 
       'find /files/base/incomming -maxdepth 1 -type f -name '*.txt' -printf . | wc -c')

上面對給定目錄執行find命令,將深度限制為僅該目錄,並將匹配項限制為純文件 ( -type f) 並且名稱以.txt;結尾 對於每場比賽,都會列印一個句點,其總數由wc -c命令替換計算並返回到賦值給count.

sftp不會派生外殼,因此您不能在那裡使用常用命令。假設你也可以通過ssh你可以使用登錄

ssh Dbprd@101.102.130.23 'ls /files/base/incomming/*.txt' | wc -l

或者

ssh Dbprd@101.102.130.23 'ls /files/base/incomming/*.txt | wc -l'

完成問題中描述的任務。

如果(無論出於何種原因)你想使用sftp你需要使用其中一個可用的命令ftp(並希望ftpd另一邊知道如何處理萬用字元):

echo 'ls -l /files/base/incomming/*.txt' | sftp Dbprd@101.102.130.23 | wc -l

引用自:https://unix.stackexchange.com/questions/478147