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

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

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

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 10, Shell Script, перемещение курсора
  • Как перенаправить вывод из команды find (использующей grep) в файл журнала?
  • Не удается получить пользователя $ HOME поверх su на Solaris и AIX
  • Мониторинг процессов в Solaris
  • Тип файловой системы Solaris 5.10
  • Когда UNIX «дефрагментирует»? (в частности, Solaris)
  • Как сопоставить шаблон, удалить шаблон, а также следующую и предыдущую строку в Solaris 10
  • Настройка ssh для сеанса linux to solaris
  • OracleSolaris 11.2 - удалить каталог, который является точкой монтирования
  • Awk зависает во время математической операции в Solaris
  • Подавить новую строку, когда Awk'ing массив
  • Interesting Posts

    Разделить файлы с помощью awk и сгенерировать результаты в другом каталоге

    Доступ к Linux после установки другой ОС

    Как я могу правильно переопределить политики логротата?

    Как я могу получить и сравнить два значения из файла?

    QEMU VM с использованием драйверов virtio без поддержки / модуля ядра на хосте?

    Дублировать UUID для физических томов, но PV не входят в группу томов

    Сброс настроек $ PATH по умолчанию для Кали

    ничего не записывается в текстовый файл, если вы запускаете из cron

    Не удалять или перемещать в корзину в контекстном меню в некоторых каталогах (gnome)

    Работа Cron не работает

    Извлеките значение из вывода команды и используйте значение в качестве параметра для следующей команды

    вывести номер строки и шаблон в файл одновременно

    Странная ошибка с ccsm (fedora 16) 32-битная

    Направьте определенный хост на другой шлюз

    Kali Linux не загружается с USB

    Linux и Unix - лучшая ОС в мире.