2013-11-01 3 views
2

У меня нет подсказки, как «просто» получить количество папок, у которых нет подпапок. Я нашел что-то с -printf "%h\n" в find, но, я не уверен, для чего это.Количество папок, у которых нет подпапок

+1

Здесь много помощи: http://stackoverflow.com/q/18886367 –

+2

И здесь: http://stackoverflow.com/q/14912513. Интересно, что люди хотят найти папки с * двумя * подпапками. Достаточно просто изменить этот код для нулевых подпапок. –

+0

Огромное вам спасибо :) – Tempus

ответ

2
  • Для определения папки в текущей директории, которые не обладают подпапки (не считая скрытых из них):

    find . -maxdepth 1 -type d -execdir bash -c 'shopt -s nullglob; a=("$1"/*/); ((${#a[@]}==0)); exit $?' _ {} \; -print 
    
  • Taking скрытые из них во внимание (но не . и .. конечно):

    find . -maxdepth 1 -type d -execdir bash -c 'shopt -s nullglob dotglob; a=("$1"/*/); ((${#a[@]}==0)); exit $?' _ {} \; -print 
    

Если вы хотите рекурсию в папки (т.е. ALS o определить подпапки с этим свойством), просто удалите часть команды -maxdepth 1.

Есть и другие способы, конечно: 100% чистый удар, или, смешнее, используя find внутри find, как так:

find . -maxdepth 1 -type d \! -execdir sh -c 'find "$1" -mindepth 1 -type d -print -quit | read a' _ {} \; -print 

Обратите внимание, что эти методы являются 100% относительно имен файлов, содержащих забавные символы (пробелы, новые линии, ведущие/конечные пробелы и новые строки и т. д.).


Чтобы иметь (разновидность) комплексный ответ, я хотел бы добавить следующий замечательный метод. Он указал Thor в this comment of the OP, и относится к Ben Jackson «s answer in another similar question, что я цитирую (с адаптацией) ниже:

[Если файловая система поддерживает жесткие ссылки] есть гораздо более простое решение, которое использует в тот факт, что родительский каталог ссылается на .. из каждого подкаталога, увеличит количество ссылок в каталоге на 1. В каталоге без подкаталогов есть ссылка с номером 2 (. и ссылка со своего собственного родителя по его названию). Таким образом, каталог, без подкаталогов имеет счетчик ссылок 2 и могут быть найдены с помощью следующей команды:

find . -type d -links 2 

Это не законно, чтобы сделать другие жесткие ссылки на каталог, так что не должно быть никаких ложных срабатываний.

+0

+1 отличное использование 'nullglob' – anubhava

Смежные вопросы