Как найти пустые каталоги в unix

Я хочу показать все пустые каталоги под моим домашним каталогом, используя сценарий оболочки, можете ли вы помочь мне найти код? (без использования find-empty )

  • Почему не найти и найти поиск / bin?
  • Многократное перенаправление файлов с помощью awk и поиск
  • чтение cifs share не разрешено с разрешенным разрешением - запрещено разрешение каталога samba samba
  • Исключить все подкаталоги, кроме одного определенного пути в команде find
  • Что означает @ перед именем каталога?
  • Применение функции bash для каждого файла в подпапке рекурсивно
  • Когда добавление `/` в каталог меняет его значение?
  • Правильно установить бит выполнения на основе типа файла?
  • Как найти файлы с разрешениями больше, чем xxx, но игнорировать файлы с помощью SUID и SGID
  • Поиск файлов в каталоге
  • найти каталог путей в подкаталоге
  • Проблема с командой установки для копирования всего каталога
  • 3 Solutions collect form web for “Как найти пустые каталоги в unix”

    Использование GNU find :

     find ~ -type d -empty 

    (это ищет пустые каталоги, начиная с вашего домашнего каталога).

    Если вы хотите найти пустые каталоги, которые находятся в вашем домашнем каталоге, за исключением всех пустых каталогов под домашним деревом, вы можете использовать GNU find :

    find ~ -maxdepth 1 -type d -empty

    Если ваша находка не имеет никакого флагов (например, для exmaple один из busbox или любой другой POSIX-совместимой find ), вы должны сделать это таким образом (на основе ответа @ jordanm ), используя bash :

     find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; a=("$1"/*); [[ ${a[@]} ]] || printf "%s\n" "$1"' sh {} \; 
    • -type d найти только каталоги
    • -exec bash -c '...' sh {} \; вызывает оболочку bash для каждого найденного каталога
      • shopt -s nullglob; shopt -s dotglob shopt -s nullglob; shopt -s dotglob в этом экземпляре bash , nullglob запрещает bash возвращать шаблон при совпадении ничего. dotglob включает файлы и каталоги, начинающиеся с точки ( . ).
      • a=("$1"/*) заполняет массив $a всеми элементами в каталоге обработки
      • [[ ${a[@]} ]] проверить, содержит ли $a элементы. Если не…
      • printf "%s\n" "$1" печатает имя каталога

    Если вы хотите обработать этот список дальше, обязательно разделите элементы на null:

     find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; a=("$1"/*); [[ ${a[@]} ]] || printf "%s\0" "$1"' sh {} \; | xargs -0 ... 
    Linux и Unix - лучшая ОС в мире.