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