
Мне нужно найти файлы в диапазоне дат с точностью до минуты. Полагаю, знание того, как это сделать с точностью до секунды, может когда-нибудь пригодиться. В любом случае. Я научился использовать -newermt и даже -not -newermt; однако, похоже, я не могу получить правильные результаты, когда объединяю их. Я нашел примеры использования find для Linux, но не думаю, что эти переключатели работают в OSX. Смотрите следующий список файлов:
#$ ls -l
total 32
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test1.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test1_old.swc
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test2.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test2_old.swc
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test3.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test3_old.swc
-rw-r--r-- 1 testuser staff 1024 Oct 26 20:12 test4.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 test4_old.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 20:11 test5.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 20:13 test6.swc
-rw-r--r-- 1 testuser staff 0 Oct 26 19:00 timestamp.tmp
Я ожидаю, что следующая команда вернет test1.swc — test4.swc; однако обратите внимание, что она вернула test6.swc:
#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:13'
./test1.swc
./test2.swc
./test3.swc
./test4.swc
./test6.swc
Я подумал, что минута для условия -not не указана, поэтому попробовал следующее, но оно ничего не вернуло:
#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:12'
#$
Я пришел к выводу, что я неправильно комбинирую ключи -newermt и -not -newermt. Есть ли какие-нибудь советы, как это исправить?
решение1
Ваш синтаксис выглядит правильным. Как вы создали эти файлы. Я видел неправильный возврат, когда просто использовал touch для обновления даты.
В BSD -a не является обязательным, и я предпочитаю использовать ! вместо -not (личное предпочтение)
При поиске справки по командам помните, что вам нужно искать в BSD, поскольку есть некоторые различия, которые я используюСтраницы руководства FreeBSD
Помните, что в файле есть что-то за пределами минут, поэтому, если вам нужна первая секунда, вам нужно ее отметить. Я создал структуру, похожую на вашу, и когда я добавил :00 для секунд, я мог получить те же результаты, что и вы, хотя это не имело смысла. Поэтому я выполнил ls -lT и смог увидеть секунды в файле, а затем запустил команду find и получил ожидаемые результаты. Похоже, что по умолчанию ! или -not устанавливает секунды на 59, поэтому включает всю минуту.
#$ найти . -newermt "2010-10-26 20:11:00" ! -newermt "2010-10-26 20:13:00"