Если у вашего find нет флага -empty
(например, как у busbox
или любого другого POSIX-совместимого find
), вы должны сделать это таким образом (вдохновленные ответом @jordanm от answer), используя 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
в этом примере bash
, nullglob
не позволяет bash возвращать шаблон, если он ничего не нашел. dotglob
включает файлы и каталоги, начинающиеся с точки (.
). a=("$1"/*)
заполнить массив $a
всеми элементами в каталоге обработки[[ ${a[@]} ]]
проверить, содержит ли $a
элементы. Если нет... printf "%s\n" "$1"
печатает имя каталогаЕсли вы хотите обрабатывать этот список дальше, убедитесь, что элементы разделены нульбайтом:
find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob;
a=("$1"/*); [[ ${a[@]} ]] || printf "%s\0" "$1"' sh {} \; | xargs -0 ...
Вызовите mysql с помощью -N, чтобы отключить заголовки столбцов, т.е.mysql -N