【问题标题】:Find files in order of modification time按修改时间顺序查找文件
【发布时间】:2012-01-13 09:07:10
【问题描述】:

我有一个这样的shell脚本:

`find $1 -name $2 -type f -mmin +$3`中的名称

文件名=`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

请帮忙

【问题讨论】:

    标签: time find alphabetical


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      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
      

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2016-04-01
          • 2018-05-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-16
          • 1970-01-01
          相关资源
          最近更新 更多