我有一个像这样的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
请帮忙
答案 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)
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)
}