@MichaelScheper: я даже не знаю, с чего начать этот комментарий.
Гонки легкости на орбите
1
@Notinlist: вот ответ: meta.stackexchange.com/questions/10249/… К сожалению, оказалось, что срок истек. Жаль, потому что поиски в сети все еще приземляются здесь, и принятый ответ был полезен для многих людей.
Майкл Шепер
@MichaelScheper: Если вы можете найти возможность проголосовать за переход на unix.stackexchange.com, обязательно укажите мне. Поскольку у вас нет представителя, чтобы увидеть закрывающийся диалог, я дам вам подсказку: его нет. Подумайте о том, чтобы быть менее воинственным, когда вы не понимаете, о чем говорите. Спасибо за внимание.
Гонки легкости на орбите
5
@LightnessRacesinOrbit: Я прошу прощения за то, что выглядел как «боевой». Мне не разрешено редактировать мои комментарии, но для дальнейшего использования, был ли мой комментарий восхваляющим вопрос, который вас обидел? Я должен сказать, что я чувствую себя немного слепым, даже после того, как вы дали свой предыдущий комментарий пользу от сомнения. На самом деле я пытался быть более конструктивным, чем добавление другого «я тоже», выясняя, как работает миграция: meta.stackexchange.com/a/10250/249555 60-дневный срок, возможно, скрывает эту опцию? Извините за задницу. Еще раз спасибо - искренне - за ваше время и внимание.
Майкл Шепер
Ответы:
323
Как отметил Макс, вы не можете, но проверка файлов, измененных или доступных, не так уж сложна. Я написал учебник об этом, еще сегодня. Суть которого заключается в использовании -newerXYи ! -newerXY:
Пример: чтобы найти все файлы, измененные 7 июня 2007 года:
$ find .-type f -newermt 2007-06-07!-newermt 2007-06-08
Чтобы найти все файлы, к которым обращались 29 сентября 2008 года:
$ find .-type f -newerat 2008-09-29!-newerat 2008-09-30
Или файлы, разрешение которых было изменено в тот же день:
$ find .-type f -newerct 2008-09-29!-newerct 2008-09-30
Если вы не измените права доступа к файлу, 'c' обычно соответствует дате создания.
Моя версия find (GNU 4.2.32) не поддерживает предикаты -newerXY. Нужна ли конкретная минимальная версия? Или это случай компиляции find с помощью специального переключателя configure?
yukondude
1
@yukondude: Ты прав. Локальная версия find у меня - GNU 4.4.0 - есть, а у 4.1.20, что у меня на Dreamhost, нет. Kludge с созданием двух файлов должен работать в любом случае.
Arve
1
В некоторых системах (FreeBSD, OS / X ...) -newerBtсовпадает по времени рождения (создания) файла .
Стефан Шазелас
3
Обратите внимание, что -newerxtон доступен во FreeBSD с 2001 года (где он был впервые представлен в виде патча в 1998 году), некоторые другие BSD и GNU находят (начиная с 4.3.3 в 2007 году) на основе поиска HP / UX, который был представлен -newerXY(но где Y == t не поддерживается).
Стефан Шазелас
Используя: find (GNU findutils) 4.4.0, этот синтаксис не работает на SUSE ext3, если он должен перечислить файлы / w mtime на эту дату, он ничего не возвращает
Проблема в том, что я хочу проверить на определенную дату, а не в течение определенного периода времени.
sverrejoh
1
Итак, выясните, сколько дней назад это число, и используйте это число.
jmanning2k
15
ctimeне имеет никакого отношения ко времени создания , это время смены инода.
Стефан Шазелас
47
Это два шага, но мне нравится делать это так:
Сначала создайте файл с определенной датой / временем. В этом случае файл 2008-10-01 в полночь
touch -t 0810010000/tmp/t
Теперь мы можем найти все файлы, которые новее или старше, чем указанный выше файл (по дате изменения файла. Вы также можете использовать -anewer для доступа и -cnewer изменения статуса файла).
find /-newer /tmp/t
find /-not -newer /tmp/t
Вы также можете просматривать файлы между определенными датами, создавая два файла одним касанием.
Это то, чего хочет большинство людей, но он не получил достаточно голосов !!!
Sjas
2
это может не сработать, если несколько миллионов файлов находятся в одном каталоге.
Деннис Нольте
3
Есть побочные эффекты, если термин поиска grep находится в имени файла.
Snorex
mywiki.wooledge.org/ParsingLs - лучший подход, вероятно, состоит в том, чтобы напечатать дату создания в машиночитаемой форме, возможно, statесли у вас ее нет find -printf.
tripleee
12
Ты не можешь Ключ -c сообщает вам, когда разрешения были изменены в последний раз, -a проверяет самое последнее время доступа и -m проверяет время изменения. Файловая система, используемая большинством версий Linux (ext3), не поддерживает запись «время создания». Сожалею!
На самом деле, это не просто тип файловой системы - здесь нет системного интерфейса для получения такой информации, даже если ее хранит файловая система. Один из недостатков Unix восходит к самым ранним дням, поэтому Unix никогда не взлетит.
chrisdowney
1
Unix никогда не взлетит?
lucid_dreamer
8
@ Макс: правильно о времени создания.
Тем не менее, если вы хотите , чтобы вычислить истекшие дни аргумента для одного из -atime, -ctime, -mtimeпараметры, вы можете использовать следующее выражение
Замените «2008-09-24» на любую дату, которую вы хотите, и для ELAPSED_DAYS будет установлено количество дней между тем и сегодняшним днем. (Обновление: вычесть одно из результата, чтобы выровнять сfind его с округлением даты.)
Итак, чтобы найти любой файл, измененный 24 сентября 2008 года, команда будет выглядеть так:
find .-type f -mtime $((( $(date +%s)- $(date -d '2008-09-24'+%s))/60/60/24-1))
Это будет работать, если ваша версия findне поддерживает -newerXYпредикаты, упомянутые в ответе @Arve :.
Ответы:
Как отметил Макс, вы не можете, но проверка файлов, измененных или доступных, не так уж сложна. Я написал учебник об этом, еще сегодня. Суть которого заключается в использовании
-newerXY
и! -newerXY
:Пример: чтобы найти все файлы, измененные 7 июня 2007 года:
Чтобы найти все файлы, к которым обращались 29 сентября 2008 года:
Или файлы, разрешение которых было изменено в тот же день:
Если вы не измените права доступа к файлу, 'c' обычно соответствует дате создания.
источник
-newerBt
совпадает по времени рождения (создания) файла .-newerxt
он доступен во FreeBSD с 2001 года (где он был впервые представлен в виде патча в 1998 году), некоторые другие BSD и GNU находят (начиная с 4.3.3 в 2007 году) на основе поиска HP / UX, который был представлен-newerXY
(но где Y == t не поддерживается).find location -ctime time_period
Примеры time_period:
Более 30 дней назад:
-ctime +30
Менее 30 дней назад:
-ctime -30
Ровно 30 дней назад:
-ctime 30
источник
ctime
не имеет никакого отношения ко времени создания , это время смены инода.Это два шага, но мне нравится делать это так:
Сначала создайте файл с определенной датой / временем. В этом случае файл 2008-10-01 в полночь
Теперь мы можем найти все файлы, которые новее или старше, чем указанный выше файл (по дате изменения файла. Вы также можете использовать -anewer для доступа и -cnewer изменения статуса файла).
Вы также можете просматривать файлы между определенными датами, создавая два файла одним касанием.
Это найдет файлы между двумя датами и временем
источник
find
которого не хватает-newerXY
Вы могли бы сделать это:
Пример:
источник
stat
если у вас ее нетfind -printf
.Ты не можешь Ключ -c сообщает вам, когда разрешения были изменены в последний раз, -a проверяет самое последнее время доступа и -m проверяет время изменения. Файловая система, используемая большинством версий Linux (ext3), не поддерживает запись «время создания». Сожалею!
источник
@ Макс: правильно о времени создания.
Тем не менее, если вы хотите , чтобы вычислить истекшие дни аргумента для одного из
-atime
,-ctime
,-mtime
параметры, вы можете использовать следующее выражениеЗамените «2008-09-24» на любую дату, которую вы хотите, и для ELAPSED_DAYS будет установлено количество дней между тем и сегодняшним днем. (Обновление: вычесть одно из результата, чтобы выровнять с
find
его с округлением даты.)Итак, чтобы найти любой файл, измененный 24 сентября 2008 года, команда будет выглядеть так:
Это будет работать, если ваша версия
find
не поддерживает-newerXY
предикаты, упомянутые в ответе @Arve :.источник
С помощью переключателей -atime, -ctime и -mtime вы можете приблизиться к тому, чего хотите достичь.
источник
источник
`ls ...`
работах, он не используетfind
инструмент.Я нашел этот сценарий в сценарии, который удаляет все файлы старше 14 дней:
Я думаю, что здесь вам поможет немного больше "man find" и поиск параметров -ctime / -atime и т. Д.
источник