Я хочу получить все файлы .log из каталога /var/log, сохранить результаты в csv-файле вместе с соответствующим размером каждого файла журнала в kB. в кБ.
Я начал с получения файлов с помощью find:
find . -type f -name "*.log"
как сохранить их в файл?
Это было бы моим лучшим предположением, а затем поместить его содержимое в файл в вашем домашнем каталоге с именем var-log.csv
find . -type f -name "*.log" -exec ls -s {} \; > ~/var-log.csv
Это может помочь:
ls -l --block-size=K *.log | awk {'print $9","$5'} > nameSize.csv
С GNU find
:
find . -name '*.log' -printf '%p,%s\n'
Это напечатает имя файла и размер файла в байтах, разделенных запятой. Используйте % f
вместо % p
, если вам нужно только базовое имя файла (т.е. без пути).
Для отображения в килобайтах (единицы 10 ^ 3, «КБ») или кибибайтах (единицы 2 ^ 10, «КиБ») вам потребуется постобработка вывода. См. Стандартный инструмент для преобразования счетчика байтов в KiB MiB человека и т. Д .; например, du, ls1 для нескольких способов сделать это. Использование awk
или perl
, вероятно, проще всего, потому что вы хотите изменить только второе поле каждой строки.
ls -l даст вам все необходимые данные и даже больше:
: ls -l /var/log/*.log
...
-rw-r--r-- 1 root root 123456 Jul 11 17:28 /var/log/xinetd.log
...
Затем вы можете извлечь нужные вам поля с помощью awk:
: ls -l /var/log/*.log | awk '{print $5,$9}'
123456 /var/log/xinetd.log
Если вы хотите, чтобы они были разделены каким-то другим символом:
: ls -l /var/log/*.log | awk '{print $5","$9}'
123456,/var/log/xinetd.log