Найти файлы в каталоге, измененном в разное время

Баш новичок здесь. Задача состоит в том, чтобы найти все файлы в (довольно большом) каталоге, дата модификации которого попадает между различными парами раз. Эти времена указаны как метки времени Unix в файле CSV:

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, а остальные печатаются:

$ bash datefind.sh
find: Can't parse date/time: 1483743420
1484348640
1484953920
1485559200
1486164480
1486769820

Есть ли способ сделать это с помощью одной команды поиска? Или я должен попробовать что-то еще?

1 ответ

Решение

С помощью GNU найдите:

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: Спецификации времени интерпретируются как аргумент опции -d даты GNU.

-o: логическое ИЛИ

-a: логическое И


Что делает 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 -не -newermt @ 1483747020
-o -newermt @ 1484348640 -не -newermt @ 1484352240
-o -newermt @ 1484953920 -не -newermt @ 1484957520
-o -newermt @ 1485559200 -не -newermt @ 1485562800
-o -newermt @ 1486164480 -не -newermt @ 1486168080
-o -newermt @ 1486769820 -не -newermt @ 1486773420
Другие вопросы по тегам