递归目录搜索,显示文件夹中的最新文件

递归目录搜索,显示文件夹中的最新文件

有人可以指出哪里出了问题吗?正在进行目录搜索(基于文件夹结构和文件类型)每个客户的文件夹结构都是相同的。只是客户文件夹的名称不同。结构示例:

  • httpdocs/client1/channel1/backup
  • httpdocs/client5/channel5/备份
  • httpdocs/client8/channel1/备份

这部分有效,它只是向我显示与最新文件相对应的备份文件夹中的所有文件。

#!/bin/bash

# Array of root folders
#folders=("a" "b")
array=(httpdocs/*\/client1/backup/*.xml)

# Search all specified root folders
for dir in "${array[@]}"; 
do echo "$dir";
    # date of each file with "stat"
    find -path $array -type f -exec stat -f "%m,%N" {} ';' | \
        # sort by date, most recent first
        sort -gr | \
        # extract first (most recent) file
        head -1 | \
        # return file name only
        cut -d, -f2
done

头似乎不工作。有什么理由吗?我的格式有误吗?

我也尝试过:

find -path "*\/chanel1/backup/*.xml" -type f | sort -gr | head -1 | cut -d, -f2

这仅输出列表中的最后一个文件夹以及该文件夹中的最新文件。 (我必须在 Web Root (Httpdocs) 中运行它)

答案1

我会使用更像你最后一种方法的东西,例如

for d in $(find httpdocs -type d -name backup) do ls -t $d | grep '.xml$' | head -1 done

ls -t按修改时间排序,最新的排在最前面。

如果您想要输出中的完整路径名,您可以使用ls -t $d/*.xml并跳过 grep。如果您愿意,可以使用简单但非显而易见的方法来缩短路径名,例如 sed 或 dirname。

相关内容