Найти каталоги без файлов в Unix / Linux - PullRequest
7 голосов
/ 26 мая 2010

У меня есть список каталогов

/home
  /dir1
  /dir2
  ...
  /dir100

В некоторых из них нет файлов. Как я могу использовать Unix find, чтобы сделать это?

Я пытался

find . -name "*" -type d -size 0 

Кажется, не работает.

Ответы [ 5 ]

14 голосов
/ 26 мая 2010

Есть ли в вашей находке предикат -empty?

Вы должны быть в состоянии использовать find . -type d -empty

1 голос
/ 02 марта 2012

Вы также можете использовать:

find . -type d -links 2

. и .. оба считаются ссылкой, как и файлы.

1 голос
/ 26 мая 2010

-empty сообщает о пустых папках. Если вы хотите найти пустые деревья, взгляните на: http://code.google.com/p/fslint/source/browse/trunk/fslint/finded

Обратите внимание, что сценарий нельзя использовать без других вспомогательных сценариев, но вы можете установить fslint и использовать его напрямую?

1 голос
/ 26 мая 2010

Если вы пользователь zsh, вы всегда можете это сделать. Если нет, возможно, это убедит вас:

echo **/*(/^F)

**/* будет расширяться до каждого дочернего узла текущего рабочего каталога, а () является квалификатором glob. / ограничивает совпадения для каталогов, а F ограничивает совпадения для непустых. Отрицание этого с ^ дает нам все пустые каталоги. Подробнее см. Справочную страницу zshexpn .

0 голосов
/ 26 января 2014

В ответе Пимина Константина Кефалу печатаются папки, содержащие только 2 ссылки и другие файлы (d, f, ...).

Самый простой способ, который я нашел, это:

for directory in $(find . -type d); do
   if [ -n "$(find $directory -maxdepth 1 -type f)" ]; then echo "$directory"
   fi
done

Если у вас есть имя с пробелами, используйте кавычки в "$ directory".

Вы можете заменить. по вашей справочной папке.

Я не смог сделать это с помощью одной инструкции поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...