Найдите и удалите пустые файлы: ‘-size 0’ против ‘-empty’

Вопрос или проблема

Чтобы найти и удалить пустые файлы, я нашёл следующий вопрос на Stack Overflow:

https://stackoverflow.com/q/3157343

Там около 10 ответов, но все они используют -size 0, а не -empty.

Например, ответ на +153:

find . -name 'file*' -size 0 -print0 | xargs -0 rm

Другой ответ, +100:

find -name 'file*' -size 0 -delete

Почему так? Другими словами, какие преимущества дает -size 0 по сравнению с -empty?

Моё личное решение для macOS — это

find . -mindepth 1 -maxdepth 1 -type f -empty -print -delete

Оператор -size задан стандартом POSIX, так что любая его реализация поддерживает это. -empty не задан, и поэтому доступен не повсюду. Поэтому безопаснее использовать -size 0, чтобы проверить, что файл пустой, если вы не знаете, с какой версией find он будет использоваться.

Ответ или решение

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

Операторы -size 0 и -empty

  1. -size 0

    • Оператор -size 0 используется для поиска файлов размером ровно 0 байт. Он является частью спецификации POSIX, что гарантирует его поддержку в большинстве систем, которые используют стандартный инструментарий Unix, включая Linux и macOS.
    • Оператор проверяет фактический размер файла. Это означает, что если файл не содержит никаких данных, он будет выбран по условию -size 0.
    • Преимущества:
      • Универсальность: поддерживается на большинстве систем и дистрибутивов.
      • Ясность: явное указание на размер файла.
    • Недостатки:
      • Не учитывает пустые директории.
  2. -empty

    • Оператор -empty используется для поиска пустых файлов и пустых директорий. Он не входит в базовую спецификацию POSIX, и его поддержка может варьироваться в зависимости от реализации команды find.
    • Преимущества:
      • Позволяет находить как пустые файлы, так и пустые директории с одной командой.
    • Недостатки:
      • Ограниченная поддержка: может отсутствовать в некоторых версиях find, поэтому использование этого оператора не всегда является безопасным.

Рекомендации по выбору метода

Ваш выбор между -size 0 и -empty зависит от нескольких факторов:

  • Совместимость: Если вы работаете в среде, где необходимо обеспечить максимальную совместимость с различными Unix-подобными системами, лучше использовать -size 0. Это гарантирует, что ваш скрипт будет работать на любых системах, где доступен find.

  • Требования к содержимому: Если вам нужно находить только пустые файлы и игнорировать директории, то оператор -size 0 будет более подходящим. Если вы хотите получать пустые директории при анализе, используйте -empty, но убедитесь, что ваша среда поддерживает этот оператор.

Заключение

Таким образом, предоставленные вами команды, такие как find . -name 'file*' -size 0 -delete и find . -mindepth 1 -maxdepth 1 -type f -empty -print -delete решают одну задачу, но с разными подходами. Если вы хотите гарантировать совместимость и ясность, выбирайте -size 0. Если же вам нужна функциональность и возможность находить как файлы, так и директории, и если вы уверены в поддержке -empty в вашем окружении, можете применять этот оператор.

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

Оцените материал
Добавить комментарий

Капча загружается...