使用Bash scp三个最新文件

时间:2011-04-02 16:32:48

标签: bash scp

我正在尝试scp目录中的三个最新文件。现在我使用ls -t | head -3找出他们的名字,然后在scp命令中写出来,但这变得很艰难。我尝试使用ls -t | head -3 | scp *username*@*address*:*path*,但这不起作用。最好的方法是什么?

4 个答案:

答案 0 :(得分:7)

也许是最简单的解决方案,但它不处理文件名中的空格

scp `ls -t | head -3` user@server:.

使用xargs具有处理文件名中的空格的优点,但会执行三次scp

ls -t | head -3 | xargs -i scp {} user@server:.

基于循环的解决方案看起来像这样。我们在这里阅读时使用,因为read的默认分隔符是换行符,而不是像for循环那样的空格字符

ls -t | head -3 | while read file ; do scp $file user@server ; done

可悲的是,完美的解决方案是一个执行单个scp命令,同时与白色空间很好地工作的解决方案,目前还没有找到我。

答案 1 :(得分:1)

编写一个简单的bash脚本。只要它们是文件而不是目录,这个文件就会发送最后三个文件。

#!/斌/庆典

DIR=`/bin/pwd`

for file in `ls -t ${DIR} | head -3`:
 do
  if [ -f ${file} ];
  then
    scp ${file} user@host:destinationDirectory
  fi
done

答案 2 :(得分:1)

尝试使用此脚本将最新的3个文件从提供的第一个参数路径scp到此脚本:

#!/bin/bash

DIR="$1"

for f in $(ls -t `find ${DIR} -maxdepth 1 -type f` | head -3)
 do
    scp ${f} user@host:destinationDirectory
done

find -type f确保只在$ {DIR}中找到文件,head -3找到前3个文件。

答案 3 :(得分:1)

这可能与海报不再相关,但是你带我去了一个我认为你想要的想法:

tar cf - `ls -t | head -3` | ssh *username*@*server* tar xf - -C *path*