Linux:反向排序目录中的文件并获取第二个文件

时间:2016-03-29 17:04:14

标签: linux shell

我正在尝试获取第二个文件,当文件内容反向排序(desc顺序)并使用scp将其复制到我的本地目录时

这是我得到的:

scp -r uname@host:./backups/dir1/$(ls -r | head -2| tail -1) /tmp/data_sync/dir1/

我在运行此脚本时似乎仍然会复制所有文件。我错过了什么? TIA。

2 个答案:

答案 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遵循树遍历中遇到的符号链接。

相关问题