Извлечение файлов из каталога и сохранение имен и размеров файлов в КБ в CSV-файле

Я хочу получить все файлы .log из каталога /var/log, сохранить результаты в csv-файле вместе с соответствующим размером каждого файла журнала в kB. в кБ.

Я начал с получения файлов с помощью find:

find . -type f -name "*.log"

как сохранить их в файл?

-1
19.07.2016, 17:19
4 ответа

Это было бы моим лучшим предположением, а затем поместить его содержимое в файл в вашем домашнем каталоге с именем var-log.csv

find . -type f -name "*.log" -exec ls -s {} \; > ~/var-log.csv
0
28.01.2020, 05:13

Это может помочь:

ls -l --block-size=K *.log | awk {'print $9","$5'} > nameSize.csv
0
28.01.2020, 05:13

С GNU find :

find . -name '*.log' -printf '%p,%s\n'

Это напечатает имя файла и размер файла в байтах, разделенных запятой. Используйте % f вместо % p , если вам нужно только базовое имя файла (т.е. без пути).

Для отображения в килобайтах (единицы 10 ^ 3, «КБ») или кибибайтах (единицы 2 ^ 10, «КиБ») вам потребуется постобработка вывода. См. Стандартный инструмент для преобразования счетчика байтов в KiB MiB человека и т. Д .; например, du, ls1 для нескольких способов сделать это. Использование awk или perl , вероятно, проще всего, потому что вы хотите изменить только второе поле каждой строки.

1
28.01.2020, 05:13

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

-1
28.01.2020, 05:13

Теги

Похожие вопросы