【问题标题】:Find file and send it to ftp查找文件并将其发送到 ftp
【发布时间】:2012-09-27 10:48:47
【问题描述】:

我是 bash 脚本的新手,我必须编写一个脚本,在目录中找到最新的 .mpg 文件,然后将其发送到 ftp 服务器。到目前为止,我找到了找到我的文件的命令。

#! /bin/bash

find /home/user/directory -type f -mmin -50 -name *.mpg \( ! -regex ".*/\..*" \)

这可行,但我不知道如何将该命令的输出发送到 ftp 服务器。我读过我必须使用变量,但到目前为止我无法理解它们。

【问题讨论】:

    标签: bash shell ftp find


    【解决方案1】:

    使用|可以将一个命令的输出作为输入传递给另一个命令

    find /home/user/directory -type f -mmin -50 -name *.mpg \( ! -regex ".*/\..*" \) | ftp ...
    

    查找最新mpg文件的更简单方法:

    ls -rt /home/user/directory/*.mpg | head -1 | ftp ...
    

    如果您想发送多个文件xargs 即需要 5 个最新文件

    ls -rt /home/user/directory/*.mpg | head -5 | xargs ftp ...
    

    ls 列出/home/user/directory/*.mpg 中的文件,其中* 扩展为带有.mpg 扩展名的任何文件名。 -t 告诉 ls 按时间顺序列出,-r 是反向排序,因为我们希望最新的在前而不是最旧的。 head 命令仅用于显示我们想要的结果数量,例如一个-1 或五个-5head 通常用于仅查看文件中的特定行数,要查看文件中的第一行,我们将运行 head -1 file.txt

    管道示例:

    grep 用于在 files/stdout 中搜索文本

    因此,如果您想知道firefox 是否包含在file.txt 的第一行中,我们会将pipe 的输出head -1 file.txt 输出到grep firefox

    head -1 file.txt | grep firefox

    您可以通过管道将多个命令组合在一起以获得您想要的结果。

    【讨论】:

    • 我想我必须使用 find 命令,因为这个脚本将在 cron 作业中使用,并且最新的文件将在最后 50 分钟内被修改。请帮我处理这个“到你的 ftp 的管道”命令。
    • 我找到了解决方案:FIND COMMAND is: find /home/user/path-to-folder/ -type f -mtime -1 -name *.avi \( ! -regex ".*/\..*" \)) FTP COMMAND is lftp -u username,password your.ftp <<EOF cd / lcd /home/user/path-to-folder mirror -R quit 0 EOF