2015-07-05 4 views
4

Я хочу создать сценарий bash, который находит каталоги более 500 МБ в каталоге foo.Как найти самые большие каталоги

У меня есть эта команда, которая находит каталоги с foo в порядке возрастания размера.

du /foo/* | sort -n 

Проблема с этим связана с размером родительского каталога. Так, например, выход будет:

... 
442790 /foo/bar/baz/qux 
442800 /foo/bar/baz 
442880 /foo/bar 

Я хочу выход только показать /foo/bar/baz/qux. Поскольку родительские каталоги содержат /foo/bar/baz/qux, там есть собственный размер файла, но на самом деле это крошечные папки, за исключением /foo/bar/baz/qux.


Некоторые псевдо-код:

if the current directory is greater than 500mb then 
    check next directory is parent to current directory (i.e `/foo/bar/baz` is parent of `/foo/bar/baz/qux`) then 
     takeaway size of parent from current. 
     if resulting size is greater than 500mb then 
      return row 
     else 
      go to next row 
    else 
     go to next row 
else 
    go to next row 
+0

Теперь я из мобильного приложения, но я уверен, что есть опция «найти» для выполнения именно этого. поиск по SO. – rpax

ответ

1

С GNU find и GNU sort:

find /some/dir -type d -exec du -hS {} + | sort -rh 

du -S печатает размер каталога за исключением подкаталогов.

+0

Это не то, что я хочу. Например, если '/ foo/bar /' содержит много файлов, что делает его большим, но внутри него находится дочерний каталог. Кажется, что игнорирует '/ foo/bar' и возвращает дочерний каталог – maxisme

+0

Хорошо, попробуйте отредактированный ответ. –

+0

Работает! Спасибо! – maxisme

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