【问题标题】:How to find the latest file matching a pattern如何找到与模式匹配的最新文件
【发布时间】:2020-03-14 02:15:26
【问题描述】:

我是新手,但有人要求我编写一个 bash 脚本来将文件从一台服务器 SFTP 到另一台服务器。 bash 脚本将使用 CRON 每天运行 4 次,就在创建下面的文件之后。 客户的网站每天创建 4 次包含订单的 XML 文件。每个文件都有一个新名称,并带有一个递增的编号。 例如:

a_file-01.xml
b_file-01.xml
a_file-02.xml
b_file-02.xml
a_file-03.xml
b_file-03.xml

我怎样才能找到最新的文件(编号也最高)?

【问题讨论】:

标签: bash cron


【解决方案1】:

一个简单的方法是只使用ls。您可以通过这种方式对目录中的文件进行排序:ls -t。最新文件位于列表顶部。所以这会起作用:

NEWEST=$( ls -t | head -1 )

但是,您可能希望 glob 获取结果(以避免无意中在您的目录中的文件):

NEWEST=$( ls -t *file*.xml | head -1 ) 

【讨论】:

  • 感谢您的回复@Mark。现在有了列表,我需要将最新文件复制/移动到另一个文件夹。我有这个代码,但我无法让它工作。作为 CRON 作业的一部分对其进行测试会产生错误。 # 获取文件夹中的最新文件 cd /public_html/uploads/foldername/ NEWEST=$( ls -t | head -1 ) cp /public_html/uploads/foldername/"$NEWEST" /public_html/orders/"$NEWEST" 退出 EOF My cron如下:30 06 * * * /opt/xmlbackup.sh 谢谢!
【解决方案2】:

这里有一个函数可以做到这一点。

latest () { 
    local file latest;
    for file in "${1:-.}"/*.xml; do
      [[ $file -nt $latest ]] && latest=$file;
    done
    printf '%s\n' "$latest"
}

在 xml 文件所在的目录中运行它。

latest

应该打印出最新修改的文​​件,不管编号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2021-01-12
    • 2011-08-18
    • 2020-08-05
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多