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