我正在尝试获取第二个文件,当文件内容反向排序(desc顺序)并使用scp
将其复制到我的本地目录时
这是我得到的:
scp -r uname@host:./backups/dir1/$(ls -r | head -2| tail -1) /tmp/data_sync/dir1/
我在运行此脚本时似乎仍然会复制所有文件。我错过了什么? TIA。
答案 0 :(得分:2)
$(...)
正在本地解释。如果您希望命令在远程上运行,则需要使用ssh
并让远程端使用scp
将文件复制到本地系统。
由于解析ls
的输出存在许多问题,我将使用find
完成与ls
相同的操作,告诉它在每个文件名之间使用NUL而不是新队。 sort
对文件名列表进行排序,sed -n 2p
打印已排序的文件名列表的第二个元素。 xargs
运行scp
命令,插入文件名作为第一个参数。
ssh uname@host "find ./backups/dir1/ -mindepth 1 -maxdepth 1 -name '[^.]*' -print0 | \
sort -r -z | sed -z -n 2p | \
xargs -0 -I {} scp {} yourlocalhost:/tmp/data_sync/dir1/"
答案 1 :(得分:1)
如果我收到您的问题,只需一个规范即可完成命令:
scp -r
递归scp
您的文件,这些文件的内容按相反的顺序排序。尝试不使用-r
:
scp uname@host:./backups/dir1/$(ls -r | head -2 | tail -1) /tmp/data_sync/dir1/
scp
的基本语法是:
scp username@source:/location/to/file username@destination:/where/to/put
不要忘记-r
以递归方式复制整个目录。更多,请注意scp
遵循树遍历中遇到的符号链接。