Shell-Script
如何使用 sftp 命令獲取遠端目錄中存在的文件的計數
我有一個 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