Подтвердить что ты не робот

Как использовать ls для поиска файлов для определенного набора дат в Unix

У меня есть набор файлов в каталоге. Мне нужно найти файлы для набора конкретных дат (например, если мне нужны файлы с 16 января по 20 января). Я попытался использовать ls -ltr | grep <date>, но для выполнения выбора файлов требуется слишком много шагов. Есть ли более простой способ сделать это. Спасибо!

4b9b3361

Ответ 1

Я не уверен, сколько файлов у вас в вашем каталоге, но что-то вроде этого должно быть ослепительно быстрым:

ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 20 {print $9}'

В моей системе я вижу следующее с датами, слегка измененными:

pax> ls -al | awk '$6 == "Jan" && $7 >= 16 && $7 <= 29 {print $9}'
kids_shares.ods
our_savings.gnumeric
photos

pax> ls -ald kids_shares.ods our_savings.gnumeric photos
-rw-r--r--   1 pax pax 51005 Jan 29 19:39 kids_shares.ods
-rw-r--r--   1 pax pax  2275 Jan 28 14:48 our_savings.gnumeric
drwxrwxrwx 130 pax pax  4096 Jan 29 21:47 photos

Вы можете видеть, что даты соответствуют указанным файлам.

Одна вещь, на которую нужно обратить внимание: если файл является последним, он будет иметь время в столбце 8. Вне определенного возраста ls начинает вводить год. У меня есть смутное воспоминание о том, что это где-то около шестимесячной границы, но я не совсем уверен. Вам также нужно будет справиться с этим.

Ответ 2

Используйте find(1), это будет намного проще.

find . -mtime -$start -mtime +$end

Ответ 3

Вам лучше использовать find. Начните с создания двух временных файлов с определенным временем поиска между ними. touch может сделать это:

touch -t "201301160001" ./start
touch -t "201301202359" ./finish

Затем запустите find:

find /path/to/files -type f -newer ./start ! -newer ./finish