按修改时间顺序查找文件

时间:2012-01-13 09:07:11

标签: time find alphabetical

我有一个像这样的shell脚本:

对于`find $ 1 -name $ 2 -type f -mmin + $ 3`的名称 做什么 Filename =`basename“ls $ name”`
echo“$ Filename”>> $ 1 / order.txt
完成

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

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

我想要脚本后的order.txt 将Order.txt =>
F2
F1

而不是作为F1
F2

请帮忙

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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

一种方法:从epoch开始,以秒为单位获取文件mtimes,从epoch开始按秒排序,然后只打印文件名

答案 2 :(得分:0)

Here you go

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)
}