Совет по Linux: вывод списка файлов по возрасту

Введение

Вы когда-нибудь задумывались, как найти в каталоге файлы, к которым не прикасались целую вечность? Независимо от того, очищаете ли вы старые файлы, архивируете данные или проверяете устаревшие файлы, команда find в Linux — идеальное решение. В этом совете мы покажем вам, как вывести список файлов по их возрасту в Linux с помощью простой, но мощной команды.


Команда

find /path/to/files -type f -name '*.jpg' -mtime +30 -exec ls -l {} \;

Эта команда позволяет находить файлы по дате их последнего изменения, фильтровать их по типу или имени и отображать подробную информацию о них.


Разбор команды

1. /path/to/files

Здесь указывается каталог для поиска. Замените его фактическим путём к папке, которую вы хотите просмотреть.

  • Пример: если вы хотите выполнить поиск в своей библиотеке фотографий, используйте ~/Pictures.

2. -type f

Параметр -type указывает тип элементов для поиска.

  • f: означает только файлы (каталоги игнорируются).

3. -name '*.jpg'

Здесь результаты фильтруются по именам файлов или расширениям.

  • Пример: *.jpg находит файлы, оканчивающиеся на .jpg.
  • Вы можете заменить его другими шаблонами, например *.txt для текстовых файлов или *.log для файлов журналов.

4. -mtime +30

Это ключ к фильтрации файлов по их возрасту.

  • +30: находит файлы, последние изменения в которых были внесены более 30 дней назад.
  • Замените 30 на любое число в соответствии с вашими потребностями:
    • 1 год: используйте -mtime +365.
    • 1 неделя: используйте -mtime +7.

5. -exec ls -l {} \;

Здесь Linux указывается, что делать с найденными файлами.

  • -exec: выполняет команду для каждого файла.
  • ls -l: выводит подробную информацию о каждом файле (например, размер, разрешения, владельца и дату последнего изменения).
  • {}: заполнитель для каждого найденного файла.
  • \;: обозначает конец команды.

Совет профессионала

Хотите проверить команду, не запуская ls -l? Опустите часть -exec:

find /path/to/files -type f -name '*.jpg' -mtime +30

При этом будут просто перечислены пути к файлам без дополнительных сведений.


Зачем использовать эту команду?

Команда find невероятно универсальна и полезна для задач обслуживания системы:

  • Освобождение места на диске: поиск и удаление старых файлов.
  • Архивирование старых данных: перемещение файлов, к которым не прикасались месяцами или годами, в резервное хранилище.
  • Отслеживание устаревших файлов: проверка критически важных каталогов на наличие устаревших файлов.

Практические примеры

Пример 1: поиск старых документов

Найдите .docx файлы в вашей папке Documents, которые не изменялись более 90 дней:

find ~/Documents -type f -name '*.docx' -mtime +90 -exec ls -l {} \;

Пример 2: поиск больших файлов старше 6 месяцев

Найдите файлы размером более 100 МБ в /home/user, которые не изменялись более 6 месяцев:

find /home/user -type f -size +100M -mtime +180 -exec ls -lh {} \;
  • -size +100M: фильтрует файлы размером более 100 МБ.
  • ls -lh: отображает размеры файлов в удобочитаемом формате (например, МБ, ГБ).

Пример 3: поиск старых PDF-файлов

Найдите .pdf файлы в /home/user/Downloads, которые не изменялись в течение последнего года:

find ~/Downloads -type f -name '*.pdf' -mtime +365 -exec ls -l {} \;

Пример 4: поиск недавно изменённых файлов

Найдите .txt файлы, изменённые за последние 7 дней, в /var/www:

find /var/www -type f -name '*.txt' -mtime -7 -exec ls -l {} \;
  • -mtime -7: находит файлы, изменённые за последние 7 дней.

Пример 5: удаление старых временных файлов

Удалите файлы в /tmp, которые не изменялись более 30 дней:

find /tmp -type f -mtime +30 -exec rm {} \;
  • rm: удаляет файлы.
  • Предупреждение: используйте с осторожностью, так как файлы удаляются безвозвратно.

Пример 6: архивирование старых медиафайлов

Переместите .mp4 файлы старше 60 дней из ~/Videos в папку архива:

find ~/Videos -type f -name '*.mp4' -mtime +60 -exec mv {} ~/Archives/ \;
  • mv: перемещает файлы в указанную папку.

Пример 7: поиск файлов, созданных в определённом диапазоне времени

Найдите .log файлы, созданные от 30 до 60 дней назад, в /var/log:

find /var/log -type f -name '*.log' -mtime +30 -mtime -60 -exec ls -l {} \;
  • -mtime +30: файлы старше 30 дней.
  • -mtime -60: файлы, изменённые за последние 60 дней.

Пример 8: поиск пустых файлов старше 1 недели

Найдите пустые файлы в /home/user, которые не изменялись на прошлой неделе:

find /home/user -type f -empty -mtime +7 -exec ls -l {} \;
  • -empty: фильтрует файлы нулевого размера.

Пример 9: поиск файлов по времени доступа

Найдите .png файлы в /var/www/html, к которым не обращались в течение последних 90 дней:

find /var/www/html -type f -name '*.png' -atime +90 -exec ls -l {} \;
  • -atime: фильтрует файлы по времени доступа, а не по времени изменения.

Пример 10: поиск недавно созданных файлов

Найдите файлы в /home/user, созданные за последние 3 дня:

find /home/user -type f -ctime -3 -exec ls -l {} \;
  • -ctime: фильтрует файлы по времени создания.

Пример 11: поиск файлов по разрешениям

Найдите файлы в /etc с определёнными разрешениями (например, доступные для записи другим пользователям):

find /etc -type f -perm /o+w -exec ls -l {} \;
  • -perm /o+w: находит файлы, доступные для записи другим пользователям.

Пример 12: поиск файлов, изменённых за последний час

Найдите файлы, изменённые за последний час, в /home/user/Documents:

find ~/Documents -type f -mmin -60 -exec ls -l {} \;
  • -mmin -60: фильтрует файлы, изменённые за последние 60 минут.

Пример 13: поиск файлов с определённым владельцем

Найдите файлы, принадлежащие пользователю jose в /var/log, которые не изменялись более 90 дней:

find /var/log -type f -user jose -mtime +90 -exec ls -l {} \;
  • -user jose: фильтрует файлы, принадлежащие указанному пользователю.

Пример 14: исключение определённых каталогов

Найдите .jpg файлы в /home/user старше 30 дней, за исключением папки Downloads:

find /home/user -type f -name '*.jpg' -mtime +30 -not -path "~/Downloads/*" -exec ls -l {} \;
  • -not -path: исключает файлы в указанном каталоге.

Пример 15: поиск файлов, изменённых в определённую дату

Найдите файлы, изменённые ровно 10 дней назад, в /home/user:

find /home/user -type f -mtime 10 -exec ls -l {} \;
  • -mtime 10: находит файлы, изменённые ровно 10 дней назад.

Пример 16: поиск файлов с определёнными расширениями

Найдите .zip и .tar.gz файлы старше 60 дней в /backups:

find /backups -type f \( -name '*.zip' -o -name '*.tar.gz' \) -mtime +60 -exec ls -l {} \;
  • \( -name '*.zip' -o -name '*.tar.gz' \): выполняет поиск по нескольким расширениям файлов.

Заключение

Команда find в Linux — это мощный инструмент для управления файлами по их возрасту, типу и имени. Независимо от того, освобождаете ли вы место на диске, архивируете старые данные или отслеживаете устаревшие файлы, эта команда даёт вам полный контроль над вашими каталогами.

Попробуйте её сегодня и поднимите свои навыки работы с Linux на новый уровень!

Оставить комментарий