在 unix 中使用 SFTP 获取文件大小和名称的干净列表
Get clean list of file sizes and names using SFTP in unix
我想从使用 SFTP 的服务器中逐一获取小于 1 GB 的文件列表。
我是运行以下命令:
$sftp -oIdentityFile=/home/user/.ssh/id_rsa -oPort=22 user@hostname >list.txt <<EOF
cd upload/Example
ls -l iurygify*.zip
EOF
这导致:
$cat list.txt
sftp> cd upload/Example
sftp> ls -l iurygify*.zip
-rwxrwx--- 0 300096661 300026669 0 Mar 11 16:38 iurygify1.zip
-rwxrwx--- 0 300096661 300026669 0 Mar 11 16:38 iurygify2.zip
然后我可以使用 awk 计算获取大小和文件名,我可以将其保存到日志中以供参考,然后仅下载满足 1 GB 标准的文件。
有没有更简单的方法来完成获取此文件列表和大小?我想避免 list.txt
中的提示和命令的垃圾整体,并且不想通过 expect
命令执行此操作。
我们正在使用 SSH 密钥身份验证
也许使用 lftp
而不是 sftp
?
$ lftp sftp://xxx > list.txt <<EOF
> open
> ls -l
> EOF
$ cat list.txt
drwxr-xr-x 10 ludo users 4096 May 24 2019 .
drwxr-xr-x 8 root root 4096 Dec 20 2018 ..
-rw------- 1 ludo users 36653 Mar 31 19:28 .bash_history
-rw-r--r-- 1 ludo users 220 Mar 21 2014 .bash_logout
-rw-r--r-- 1 ludo users 362 Aug 16 2018 .bash_profile
...
您可以将 sftp commands
放入 批处理文件 并过滤输出 - 不需要 expect
.
echo 'ls -l' > t
sftp -b t -oIdentityFile=/home/user/.ssh/id_rsa -oPort=22 user@hostname | grep -v 'sftp>' >list.txt
或者更进一步,在同一步骤中筛选出“合适的尺寸”:
sftp -b t -oIdentityFile=/home/user/.ssh/id_rsa -oPort=22 user@hostname | awk '!~/sftp>/&&<1000000000' >list.txt
我想从使用 SFTP 的服务器中逐一获取小于 1 GB 的文件列表。
我是运行以下命令:
$sftp -oIdentityFile=/home/user/.ssh/id_rsa -oPort=22 user@hostname >list.txt <<EOF
cd upload/Example
ls -l iurygify*.zip
EOF
这导致:
$cat list.txt
sftp> cd upload/Example
sftp> ls -l iurygify*.zip
-rwxrwx--- 0 300096661 300026669 0 Mar 11 16:38 iurygify1.zip
-rwxrwx--- 0 300096661 300026669 0 Mar 11 16:38 iurygify2.zip
然后我可以使用 awk 计算获取大小和文件名,我可以将其保存到日志中以供参考,然后仅下载满足 1 GB 标准的文件。
有没有更简单的方法来完成获取此文件列表和大小?我想避免 list.txt
中的提示和命令的垃圾整体,并且不想通过 expect
命令执行此操作。
我们正在使用 SSH 密钥身份验证
也许使用 lftp
而不是 sftp
?
$ lftp sftp://xxx > list.txt <<EOF
> open
> ls -l
> EOF
$ cat list.txt
drwxr-xr-x 10 ludo users 4096 May 24 2019 .
drwxr-xr-x 8 root root 4096 Dec 20 2018 ..
-rw------- 1 ludo users 36653 Mar 31 19:28 .bash_history
-rw-r--r-- 1 ludo users 220 Mar 21 2014 .bash_logout
-rw-r--r-- 1 ludo users 362 Aug 16 2018 .bash_profile
...
您可以将 sftp commands
放入 批处理文件 并过滤输出 - 不需要 expect
.
echo 'ls -l' > t
sftp -b t -oIdentityFile=/home/user/.ssh/id_rsa -oPort=22 user@hostname | grep -v 'sftp>' >list.txt
或者更进一步,在同一步骤中筛选出“合适的尺寸”:
sftp -b t -oIdentityFile=/home/user/.ssh/id_rsa -oPort=22 user@hostname | awk '!~/sftp>/&&<1000000000' >list.txt