Я хочу посмотреть, сколько файлов находится в подкаталогах, чтобы выяснить, где в системе используется весь индекс. Вроде как я бы сделал это для использования пространства
du -sh /*
что даст мне пространство, используемое в каталогах вне root, но в этом случае я хочу количество файлов, а не размер.
disk-usage
recursive
inode
xenoterracide
источник
источник
du -sh /*
прояснил, как я хотел, чтобы счет работал. То же самое, просто посчитать файлы, а не байты.Ответы:
Спасибо Жилю и ксенотеррациду за исправления безопасности / совместимости.
Первая часть:
find -maxdepth 1 -type d
вернет список всех каталогов в текущем рабочем каталоге. Это по трубопроводу ...Вторая часть:
while read -r dir; do
начинается цикл while - пока канал, входящий в while, открыт (то есть до тех пор, пока не будет отправлен весь список каталогов), команда read поместит следующую строку в переменную "dir". Тогда это продолжается ...Третья часть:
printf "%s:\t" "$dir";
напечатает строку в «$ dir» (которая содержит одно из имен каталогов) с последующей вкладкой.Четвертая часть:
find "$dir -f file"
составляет список всех файлов внутри имени каталога, хранящихся в «$ dir». Этот список отправляется ..Пятая часть:
wc -l;
подсчитывает количество строк, которые отправляются на его стандартный ввод.Последняя часть:
done
просто завершает цикл while.Таким образом, мы получаем список всех каталогов в текущем каталоге. Для каждого из этих каталогов мы генерируем список всех файлов в нем, чтобы мы могли сосчитать их все, используя
wc -l
. Результат будет выглядеть так:источник
read -r
как обычноеread
средство для обратного слеша. Тогдаecho -en "$dir:\t"
снова будет искажать обратную косую черту; простое исправление - использоватьprintf '%s:\t' "$dir"
вместо этого. Далее$dir
должно быть"$dir"
( всегда используйте двойные кавычки вокруг подстановок переменных ).find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" | wc -l; done
sort -n -r -k2
в конце этого, для многих каталогов, чтобы я знал, где больше всего используется-type f
чтобы сделать это список файлов:find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
illegal option -- m
вfind
команде. Я изменил это наfind . -maxdepth ...
и получил его на работу.Попробуйте
find . -type f | wc -l
, он будет считать все файлы в текущем каталоге, а также все файлы в подкаталогах. Обратите внимание, что все каталоги не будут учитываться как файлы, только обычные файлы.источник
Вот компиляция некоторых полезных команд листинга (повторное хеширование на основе кода предыдущих пользователей):
Список папок с количеством файлов:
Список папок с ненулевым количеством файлов:
Список папок с количеством подпапок:
Список папок с ненулевым количеством подпапок:
Список пустых папок:
Список непустых папок с количеством контента:
источник
Пытаться:
в качестве отправной точки, или если вы действительно хотите проходить только через подкаталоги каталога (и пропускать файлы в этом каталоге верхнего уровня)
источник
find
по умолчанию работает рекурсивно через все подкаталоги. Если вы хотите, чтобы он работал в нескольких местах, вы можете указать все их междуfind
и-type
.698035
. Я должен увидеть около 6 номеров./home
? Я был бы на 100% уверен, что вы этого не сделаете.Следующее решение подсчитывает фактическое количество используемых inode, начиная с текущего каталога:
Чтобы получить количество файлов одного подмножества, используйте:
Для решений, исследующих только подкаталоги, без учета файлов в текущем каталоге, вы можете обратиться к другим ответам.
источник
find -printf '%i\n' | sort -u | wc -l
. Если вы хотите быть портативным, вам нужноfind . -exec ls -id {} + | cut …
вместо этого.OS X 10.6 душит команду в принятом ответе, потому что она не указывает путь для
find
. Вместо этого используйте:источник
Я знаю, что опаздываю на вечеринку, но я верю, что
bash
в некоторых ситуациях это чистое (или другой оболочка, которая принимает двойной звездный шар) может быть намного быстрее:выход:
источник
Попробуйте это:
Он должен работать нормально, если в именах файлов нет новых строк.
источник
-maxdepth 1
сразу после первогоfind
. Если вы хотите включить в свой счетчик количество подкаталогов, удалите их-type f
в конце (это должно было быть в! -type d
любом случае, чтобы были включены все файлы, не относящиеся к каталогам).Если у вас есть
ncdu
установленныйc
продукт ( необходимый для очистки), просто введите «Переключить отображение количества дочерних элементов». ИC
"Сортировать по элементам".источник
du --inodes
Я не уверен, почему никто (включая меня) не знал о:
Я уверен, что это решает проблему ОП. Я начал его использовать, чтобы выяснить, где находится весь мусор в моих огромных дисках (и перенести его на старый диск).
Дальнейшая информация
Если вы НЕ хотите повторяться (что может быть полезно в других ситуациях), добавьте
источник