查找在不同时间修改的目录中的文件

时间:2018-02-04 19:34:48

标签: bash find unix-timestamp gnu-findutils

在这里打击新手。任务是查找(相当大的)目录中的所有文件,其修改日期介于各对之间。这些时间在CSV文件中指定为Unix时间戳:

import UIKit

let myArray = ["a", "b", "c", "d", "e"] 
let selectedElement = "a"


//func arrayWrapper(inputArray: Array<String>) -> Array<String> {

    var oldArray = [String]()
    var priorElements = [String]()
    var newArray = [String]()

    for element in myArray {
        if element == selectedElement || oldArray.count > 0 {
            oldArray.append(element)
        } else {
            priorElements.append(element)
        }
        newArray = oldArray + priorElements
    }
    //return newArray
//}

priorElements
oldArray

oldArray + priorElements

newArray

我早期的想法是使用1483743420,1483747020 1484348640,1484352240 1484953920,1484957520 1485559200,1485562800 1486164480,1486168080 1486769820,1486773420 find

awk

find "$PROJECT_DIR" -type f \ -newermt "$(awk -F "","" '{print $1}' "$DATE_CSV")" -not \ -newermt "$(awk -F "","" '{print $2}' "$DATE_CSV")" 似乎无法识别此日期格式。更紧迫的是,此代码仅将第一个日期发送到find,其余的打印出来:

find

有没有办法用一个find命令执行此操作?或者我应该尝试其他什么?

1 个答案:

答案 0 :(得分:1)

使用GNU find:

PROJECT_DIR="/tmp"
DATE_CSV="file"
find "$PROJECT_DIR" \( -type f \) -a \( $(awk -F ',' 'NR==1 { print "-newermt @" $1 " -not -newermt @" $2 }; NR!=1 { print "-o -newermt @" $1 " -not -newermt @" $2 }' "$DATE_CSV") \)

来自man find

  

-newermt:时间规范被解释为GNU日期的-d选项的参数。

     

-o:逻辑OR

     

-a:逻辑AND

awk做了什么:

DATE_CSV="file"
awk -F ',' 'NR==1 { print "-newermt @" $1 " -not -newermt @" $2 }; NR!=1 { print "-o -newermt @" $1 " -not -newermt @" $2 }' "$DATE_CSV"

输出:

-newermt @1483743420 -not -newermt @1483747020
-o -newermt @1484348640 -not -newermt @1484352240
-o -newermt @1484953920 -not -newermt @1484957520
-o -newermt @1485559200 -not -newermt @1485562800
-o -newermt @1486164480 -not -newermt @1486168080
-o -newermt @1486769820 -not -newermt @1486773420