Знайдіть усі файли старші однієї хвилини


8

Як я можу findвибрати файли, які були записані та не змінені в останню хвилину?

Я знаю, що можу це зробити навпаки, знайти файли, змінені за останні 60 секунд -mtime -60s, але я хочу, щоб ті, які не були змінені за останні 60 секунд.

Я використовую Linux і отримую цю помилку, якщо використовую секунди:

find ??/ -mtime +60s -name blah.tsv
find: invalid argument `+60s' to `-mtime'

Відповіді:


13

Використовуйте find /path -type f -mtime +60s

-Тільки перед цифрами не є звичайним «аргументом тир», а значить «менше». +то "більше, ніж".

Від man find:

Усі праймери, які приймають числовий аргумент, дозволяють передувати цифрі знаком плюс (`` + '') або знаком мінус (`` - ''). Попередній знак плюс означає `` більше n '', а попередній знак мінус означає `` менше n '' і не означає `` точно n ''.

Слід зазначити, що саме для n часу час округлюється. Отже 1(1 день) не означає 86400 секунд.


2
Строго кажучи, +60це не протилежне -60, з тієї ж причини менше, ніж не є протилежністю більшому : Обидва виключають точне значення, з яким вони порівнюють. Але ваше запитання не вказує, якої саме поведінки ви хочете.
— Даніель Бек

Насправді це не зовсім так! повертає оригінальний "запит". Але погоджено, що ОП не визначає, чого він хоче.
— Каролос

На наступний день ОП заявив, що це на Linux, а не на Mac OS X. Якщо це змінило б відповідь, можете оновити її?
— Пітер Мортенсен

1
Так, це не працює в Linux. Принаймні RHEL 5.6. Однак відповідь SiegeX працює нижче.
— MattPark

2
Це не працює на CentOS. Як передбачається, він працює в Mac OS X
— trante

14
find . -type f -mmin +1

Приклад

$ ls *
four.txt  one.txt  three.txt  two.txt

$ touch foo && find . -mmin +1
.
./three.txt
./four.txt
./two.txt
./one.txt

Це більше не позначено тегом osx.
— Пітер Мортенсен

4

Другий -в -mtime -60s- це не роздільник варіантів.

-mtimeє опцією, а за нею йде аргумент опціону . Аргумент параметра є -60s, і -в ньому є частиною самого аргументу опції, а не роздільника варіанту. Це означає "менше 60 секунд". Аргументи варіантів 60sі +60sозначають "дорівнює 60 секундам" і "більше 60 секунд" відповідно.

Посібник Apple MacOS та посібник FreeBSD точно в одному місці згадують +і -префікси, і забудьте будь-де пояснити, що вони є. Це вони є.

(Посібник з інформації про GNU для GNU findмає той самий пропуск, що цікаво. Однак findсинтаксис GNU за часом дещо відрізняється від findсинтаксису BSD та MacOS .)

Подальше читання


1
Це навіть гірше, ніж просто пояснити його саме в одному місці : Усі інші параметри стосуються atimeформату часу, але це також не пояснює префікси . Це окремий розділ, на який не посилаються.
— Даніель Бек

Дійсно; і ти виявиш, що я це написав. Я написав «згадку», і «забудь де-небудь пояснити». ☺
— JdeBP

Я не мав на увазі суперечити вам, просто хотів зазначити, що саме одне місце - це також найгірше можливе місце з POV "давайте просто переглянемо сторінку чоловіка".
— Даніель Бек

Але це не пояснено точно в одному місці. Це взагалі не пояснюється. Для набору сторінок з посібниками, які, як правило, написані та відредаговані досить добре, на мій досвід, це дивовижний недолік.
— JdeBP

1
Хе! Це тому, що ви вже магічно знаєте відповідь і зможете з'єднати твійн під час читання документа, заповнивши те, що насправді не написано. Люди, у яких немає (у) нашої передбачуваності та читають посібник, щоб дізнатись, повинні задатися питанням, чому ніде немає пояснення, що таке "модифікатор". ☺
— JdeBP

3

Ви повинні мати можливість використовувати

find . ! -mtime -60s

1
Потрібна дужка для мене:find . !( -mtime -60s )
— Der Hochstapler

@OliverSalzburg: На моєму Mac він працює добре без круглих дужок (Darwin Kernel Version 11.2.0).
— Каролос

1

У системах Unix -м часу використовувався +/-, а потім число, за яким одиниці часу. [+ -] nn [дмс]

Linux використовує mtime днями, mmin хвилин, але, здається, не існує варіантів секунд і не використовує специфікатор одиниць часу. + Або - як і раніше посилається на більший або менший час, а не на аргумент опції, як згадувалося вище.

Ви можете використовувати -mmin 1, але /unix/238738/find-files-newer-than-15-seconds-but-older-than-2-seconds обговорює, як обробити секунди взагалі .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.