Команда find . -name '*2015*' -mmin +1440 -ls, ймовірно, зробить те, що ви хочете. Детальніше дивіться нижче.
Ваша перша команда мала -name 2015. Це не спрацювало, оскільки він знаходив лише файли, імена яких точно 2015 , без інших символів у них.
Ваша друга команда, find . -name *2015* -mtime +1 -exec ls -ltrh {} \;можливо, не вдалася з кількох причин:
1.* Символи без котирування розгортаються оболонкою, потім передаються в find.
Якщо в поточному каталозі є безпосередньо файли (той, у якому ви знаходитесь, коли ви запустили цю find ...команду), чиї імена містять 2015(і не починаються з а .), оболонка розширюється *2015*до списку цих імен, а потім передається цей список як аргументи до find. Це не те, що ви хочете - натомість ви хочете передати *2015*буквально як аргумент на пошук, щоб find, а не оболонку, знаходити, які файли відповідають йому.
Щоб вирішити цю проблему, цитуйте *2015*. Існує три поширених способи:
'*2015*'(тобто find . -name '*2015*' -mtime +1 -exec ls -ltrh {} \;)
"*2015*"(тобто find . -name "*2015*" -mtime +1 -exec ls -ltrh {} \;)
\*2015\*(тобто find . -name \*2015\* -mtime +1 -exec ls -ltrh {} \;)
Я пропоную писати його в одинарні лапки , як '*2015*', тому що:
Але в цьому випадку це насправді не має значення. 'і "обидва трактують *те саме, і вираз недостатньо складний для \цитування, щоб зробити його важким для розуміння.
2. -mtime +1вибирає лише файли, модифіковані два або більше днів тому.
Як man findговориться:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
-atime n
File was last accessed n*24 hours ago. When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
Припустимо, файл було змінено 47 годин тому. Щоб визначити, скільки 24-годинних періодів, це findокруглення вниз : це один 24-годинний період тому. Але -mtime +1відповідає лише файлам, час модифікації яких суворо більше, ніж один 24-годинний період тому. Таким чином, файли з вчорашнього дня не збігаються.
Див. Чому знаходить -mtime +1 лише повернення файлів, старших 2 днів? для отримання додаткової інформації, як запропонував steeldriver .
Щоб знайти файли , змінені в будь-який час більше 24 годин тому , я пропоную замість обумовлюючи це як 1440 хвилин тому з -mmin +1440:
find . -name '*2015*' -mmin +1440 -exec ls -ltrh {} \;
Деяким читачам може бути цікаво, чому я не цитував {}. Деякі люди цитують, {}щоб нагадати людям, що це не вираз для розширення дужок . Раковини в стилі Борна (як баш ) не вимагають, щоб {}нічого не містилося всередині. Можливо, якась оболонка в не-Борні дійсно стосується цього; тому деякі користувачі це цитують. Але є також помилкова думка, що іноді треба цитувати, {}щоб -execправильно обробляти імена файлів з пробілами. Це, з помилковим: з {}або '{}', findотримує ті ж аргументи, як оболонка видаляє лапки перед переходом '{}'доfind. Щоб протистояти цій помилковій думці, я не цитую {}, але це питання стилю - якщо ви віддаєте перевагу {}документувати, як оболонка не обробляє {і }спеціально, це добре.
Я рекомендую вам також змінити lsкоманду, або (як Muru запропонував ) замінити його find«S -lsдії. ls -ltrhце, мабуть, не робить те, що ви маєте намір, тому що воно запускається окремо для кожного знайденого файлу, і, отже, -tі -rпрапори, що визначають сортування, не мають значення.
Хоча форматування виводу буде дещо інакше, ніж з ls -lвикористанням, -lsце простіше і простіше.
find . -name '*2015*' -mmin +1440 -ls
Або якщо ви вирішите, що вам потрібно лише перелічити імена файлів (включаючи їх шляхи відносно .), ви можете просто вказати жодних дій, що спричинить використання -printдії за замовчуванням :
find . -name '*2015*' -mmin +1440
findЧастина виглядає добре для мене, але я також мав проблеми з-execпараметром. Я не міг так працювати. (Я намагався перемістити всі jpg-файли з однієї папки в його батьківський каталог через неї - і в кінцевому підсумку це робив вручну ...)