Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Bash对三个最新文件进行Scp_Bash_Scp - Fatal编程技术网

使用Bash对三个最新文件进行Scp

使用Bash对三个最新文件进行Scp,bash,scp,Bash,Scp,我正在尝试scp目录中的三个最新文件。现在,我使用ls-t | head-3查找它们的名字,然后在scp命令中写出它们,但这变得很困难。我试着使用ls-t | head-3 | scp*用户名*@*地址*:*路径*,但这不起作用。最好的方法是什么?编写一个简单的bash脚本。这一个将发送最后三个文件,只要它们是文件而不是目录 #!/bin/bash DIR=`/bin/pwd` for file in `ls -t ${DIR} | head -3`: do if [ -f ${file

我正在尝试scp目录中的三个最新文件。现在,我使用
ls-t | head-3
查找它们的名字,然后在scp命令中写出它们,但这变得很困难。我试着使用
ls-t | head-3 | scp*用户名*@*地址*:*路径*
,但这不起作用。最好的方法是什么?

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

#!/bin/bash

DIR=`/bin/pwd`

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

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

scp `ls -t | head -3` user@server:.
使用xargs的优点是可以处理文件名中的空格,但会执行三次scp

ls -t | head -3 | xargs -i scp {} user@server:.
基于循环的解决方案应该是这样的。我们在这里使用while read,因为read的默认分隔符是换行符,而不是像for循环那样的空格符

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

遗憾的是,完美的解决方案,即在执行单个scp命令的同时很好地使用空白,目前我还没有找到。

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

#!/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-typef
确保在${DIR}中只找到文件,
head-3
占据前三名文件。

这可能与海报无关,但你给我带来了一个想法,我认为这正是你想要的:

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

如果前2个条目不是文件,它将只发送1个文件。与其他答案相同,如果前2个条目不是文件,它也将只发送1个文件。我不相信海报曾在他的要求中列出他需要处理的目录。事实上,他这样做的方式意味着他不喜欢使用-i/{}xarg选项。这是否只会导致对scp的1次调用,而不是我们期望的基于for循环的解决方案的3次调用?遗憾的是,不会。此解决方案基本上实现了循环。它只是打字更快,而且可以处理空白。让我考虑一下,这应该是一种让它作为一个命令执行的方法。可能需要更多的打字;-)幸运的是,我从来没有在文件名中加空格,所以您的第一个解决方案应该非常有效。谢谢这正是我想要的。如果文件名中有空格,此解决方案将失败。你应该使用read,这是焦油的巧妙用法。下次需要使用此命令时,我必须尝试一下。谢谢你的发帖!