在不同时间修改的目录中查找文件
Find files in directory modified at various times
Bash 这里是新手。任务是在一个(相当大的)目录中找到所有文件,这些文件的修改日期介于不同的时间对之间。这些时间在 CSV 文件中指定为 Unix 时间戳:
1483743420,1483747020
1484348640,1484352240
1484953920,1484957520
1485559200,1485562800
1486164480,1486168080
1486769820,1486773420
我早期的想法是使用find
和awk
:
find "$PROJECT_DIR" -type f \
-newermt "$(awk -F "","" '{print }' "$DATE_CSV")" -not \
-newermt "$(awk -F "","" '{print }' "$DATE_CSV")"
find
似乎无法识别这种日期格式。更紧迫的是,这段代码只将第一个日期发送到find
,其余的打印:
$ bash datefind.sh
find: Can't parse date/time: 1483743420
1484348640
1484953920
1485559200
1486164480
1486769820
有没有办法用一个查找命令来做到这一点?或者我应该尝试别的东西吗?
使用 GNU 查找:
PROJECT_DIR="/tmp"
DATE_CSV="file"
find "$PROJECT_DIR" \( -type f \) -a \( $(awk -F ',' 'NR==1 { print "-newermt @" " -not -newermt @" }; NR!=1 { print "-o -newermt @" " -not -newermt @" }' "$DATE_CSV") \)
来自 man find
:
-newermt
: Time specifications are interpreted as for the argument to the -d option of GNU date.
-o
: logical OR
-a
: logical AND
awk 的作用:
DATE_CSV="file"
awk -F ',' 'NR==1 { print "-newermt @" " -not -newermt @" }; NR!=1 { print "-o -newermt @" " -not -newermt @" }' "$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
Bash 这里是新手。任务是在一个(相当大的)目录中找到所有文件,这些文件的修改日期介于不同的时间对之间。这些时间在 CSV 文件中指定为 Unix 时间戳:
1483743420,1483747020
1484348640,1484352240
1484953920,1484957520
1485559200,1485562800
1486164480,1486168080
1486769820,1486773420
我早期的想法是使用find
和awk
:
find "$PROJECT_DIR" -type f \
-newermt "$(awk -F "","" '{print }' "$DATE_CSV")" -not \
-newermt "$(awk -F "","" '{print }' "$DATE_CSV")"
find
似乎无法识别这种日期格式。更紧迫的是,这段代码只将第一个日期发送到find
,其余的打印:
$ bash datefind.sh
find: Can't parse date/time: 1483743420
1484348640
1484953920
1485559200
1486164480
1486769820
有没有办法用一个查找命令来做到这一点?或者我应该尝试别的东西吗?
使用 GNU 查找:
PROJECT_DIR="/tmp"
DATE_CSV="file"
find "$PROJECT_DIR" \( -type f \) -a \( $(awk -F ',' 'NR==1 { print "-newermt @" " -not -newermt @" }; NR!=1 { print "-o -newermt @" " -not -newermt @" }' "$DATE_CSV") \)
来自 man find
:
-newermt
: Time specifications are interpreted as for the argument to the -d option of GNU date.
-o
: logical OR
-a
: logical AND
awk 的作用:
DATE_CSV="file"
awk -F ',' 'NR==1 { print "-newermt @" " -not -newermt @" }; NR!=1 { print "-o -newermt @" " -not -newermt @" }' "$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