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