Intereting Posts
Подскажите пароль sudo и программно повысите привилегию в скрипте bash? Зеркальные двойные мониторы с различными разрешениями Grid Engine для программы, которая нуждается в X11, но не требует ввода пользователя Проблема аутентификации HTTPS: Polipo Какие отличные исходные ресурсы Emacs? Как установить 32-разрядные зависимости на 64-разрядной машине с помощью dnf builddep? По умолчанию оболочка в Oracle Linux? Существует ли ограничение на вложенные сеансы ssh? Как отобразить имя драйвера звуковой карты из командной строки в Lubuntu 11.10? контролировать и смотреть несколько систем непрерывно Печать состояния файлов, обрабатываемых при использовании find Почему использование цикла оболочки для обработки текста считается плохой практикой? Насколько безопасно менять диапазон эфемерных портов Linux Предпочитаемый веб-браузер Xfce Run с аргументом Что мне не нужно делать резервными копиями?

Сценарий оболочки для захвата имени и размера файла в файле csv и добавления заголовка в этот файл

У меня есть несколько zip-файлов в определенной папке. Я хочу записать имя файла и размер файлов в формате CSV в день и поместить его в crontab, чтобы я мог ежедневно сообщать, а затем отправлять его в каждом отчете.

Файлы находятся в /somedirectory/archive/test :

 -rw-rw-r--+ 1 AAAA AAAA 9.3M May 30 17:09 XXXXX_20140530_0401_28.txt.gz -rw-rw-r--+ 1 AAAA AAAA 9.3M May 30 17:09 XXXXX_20140530_0401_29.txt.gz -rw-rw-r--+ 1 AAAA AAAA 9.3M May 31 17:09 XXXXX_20140531_0401_01.txt.gz 

Теперь я хочу создать cronjob для ежедневной работы и захвата того же CSV, который мы подготовили в течение дня.

пример test30052014.csv :

 "File Name","size","date" "XXXXX_20140530_0401_28.txt.gz", "9.3","May 30" "XXXXX_20140530_0401_29.txt.gz", "9.3","May 30" 

test31052014.csv :

 "File Name","size","date" "XXXXX_20140531_0401_01.txt.gz", "9.3","May 31" 

простой способ сделать это – добавить скрипт:

 #!/bin/bash echo "File Name,Size,date" > /tmp/output_file ls -l --time-style=+%m.%d.%Y /path/to/file |grep -v "^total|^d"|awk '{print $NF","$4","$5 }' >> /tmp/output_file 

Это позволит удалить сумму в начале ls, а также исключить каталоги.

Ну вот.

 #!/bin/sh # Go to where the files are located cd /somedirectory/archive/test # Save IFS variable (if needed) and set it to newline. SAVEIFS=$IFS IFS=$(echo -en "\n\b") # List the files and for each one save the size, time and name. Then, save results. echo '"File Name","size","date"' > output.csv for line in `ls -lrt *.txt.gz`; do size=$(echo $line |awk -F ' ' '{print $5}'); date=$(echo $line |awk -F ' ' '{print $6" "$7}'); file=$(echo $line |awk -F ' ' '{print $9}'); echo '"'$size'","'$date'","'$file'"' >> output.csv done # Return IFS to original status. IFS=$SAVEIFS code=$? exit $code 

Результат:

 $ cat output.csv "File Name","size","date" "0","Jun 3","XXXXX_20140530_0401_28.txt.gz" "0","Jun 3","XXXXX_20140530_0401_29.txt.gz" "0","Jun 3","XXXXX_20140531_0401_01.txt.gz"