1

我有一个这样的shell脚本:

for name in `find $1 -name $2 -type f -mmin +$3`
do
Filename=`basename "ls $name"`
echo "$Filename">>$1/order.txt
done

find 命令按字母顺序返回 N 个文件。他们的名字按字母顺序插入到 order.txt 中。如何将其更改为修改时间的顺序?

即,如果先修改文件 F2 然后修改文件 F1,则上述脚本按字母顺序先输入 F1 然后输入 F2 到 order.txt 中。但是我希望先输入F2然后输入F1,即按照修改时间的顺序

我希望脚本之后的 order.txt 为
Order.txt=>
F2
F1

而不是
F1
F2

请帮忙

4

3 回答 3

1

find有一个-exec开关,允许您将任何匹配的文件名传递给外部命令:

find $1 -name $2 -type -mmin +$3 -exec ls -1t [-r] {} +

这样,find将一次将所有匹配的文件传递给ls并允许它为您进行排序。使用可选-r标志,文件将按从旧到新的顺序打印;没有,按最新到最旧的顺序排列。

于 2012-01-30T10:48:44.143 回答
0
for name in `find $1 -name $2 -type f -mmin +$3`
do 
ftime=$(stat -c %Y $name)
Filename=`basename "ls $name"`
echo "$ftime $Filename"
done | sort -n | awk '{print $2}' > $1/order.txt

一种方法:从纪元开始以秒为单位获取文件 mtime,按纪元以来的秒数排序,然后仅打印文件名

于 2012-01-14T23:18:19.470 回答
0

给你

find_date_sorted() {
    # Ascending, by ISO date
    while IFS= read -r -d '' -u 9
    do
        cut -d ' ' -f 3- <<< "$REPLY"
    done 9< <(find ${1+"$@"} -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\0' | sort -z)
}
于 2012-03-13T12:29:34.340 回答