как получить информацию о файлах каталога

Мне нужно получить информацию о конкретном каталоге, в основном мне нужно знать соотношение между малыми, средними и большими файлами.

Я придумал это:

for i in KMG; do printf $i du -h /usr/opt | awk '{print $1}' | grep ${i}$ | wc -l done | tee /stat.out 

из результата затем я добавляю все числа и вычитаю итоговое количество, чтобы получить количество файлов под 1k. (Я полагаю, у нас их много, поскольку это исходные файлы)

Во всяком случае, этот способ хорош для небольших каталогов, у меня на самом деле очень большой (ожидающий более 1Tera) и не знаю, как распределить файлы. Мне нужно скопировать все эти файлы в частное хранилище и указать время для копии.

Я думал о том, что делал что-то такое:

 find pwd |xargs ls -lph |awk '{print $5}' 

Но я скучаю по тому, что мне нужно, или если я должен пойти другим путем. Любая помощь будет приветствоваться.

2 Solutions collect form web for “как получить информацию о файлах каталога”

Если вы можете использовать поиск GNU (не встроенный Linux или Cygwin), сделайте find распечатать размеры файлов и выполнить обработку вывода с помощью awk для сортировки каждого размера в категории, sort и uniq для группировки по категориям и awk или sed довольно-печатать результат. Что-то вроде:

 find /usr/opt -type f -printf '%s\n' | awk '{ if ($1 ~ /^[2-9]......../) { print "3 G" } else if ($1 >= 1073741824) { print "3 G" } else if ($1 >= 1048576) { print "2 M" } else if ($1 >= 1024) { print "1 k" } else if ($1 >= 1) { print "0" } }' | sort | uniq -c | awk '{print $1 " files are in the " $3 "B range"}' 

Лучшее, что я придумал, это прибегнуть к скрипту awk.

 { if ( substr( $5, length($5), length($5) ) == "K" ) { totK++; totKsize = totKsize + substr($5, 0, length($5) - 1 );} else if ( substr( $5, length($5), length($5) ) == "M" ) { totM++; totMsize = totMsize + substr($5, 0, length($5) - 1 );} else if ( substr( $5, length($5), length($5) ) == "G" ) { totG++; totGsize = totGsize + substr($5, 0, length($5) - 1 );} else { totB++; totBsize=totBsize + $5; } } END{ print "NR of files less than 1k => " totB " total " totBsize; print "NR of files less than 1M => " totK " total " totKsize; print "NR of files less than 1G => " totM " total " totMsize; print "NR of files bigger than 1G => " totG " total " totGsize; } 

И выполните проход так:

 find . -type f |xargs ls -lh |/usr/xpg4/bin/awk -f count_files.awk 
  • Найти идентификатор устройства для раздела в Solaris 11?
  • scp рекурсивные каталоги на SunOS
  • Как получить имя хоста вместе с доменным именем?
  • Как использовать grep для поиска текстовой строки в файлах в подпапках родительской папки без ключа -r
  • Solaris 10, команда useradd
  • Как вставить несколько пустых строк после каждой строки
  • Что такое модуль apix для ОС?
  • Страницы страниц Paginate
  • Могу ли я изменить выходной формат «последней» команды для отображения года?
  • Solaris: PKG - скрипт для проверки всех пакетов, за исключением нескольких
  • Как скомпилировать Solaris в Debian?
  • Linux и Unix - лучшая ОС в мире.