Shell script para capturar o nome e o tamanho do arquivo no arquivo csv e adicionar o cabeçalho nesse arquivo

1

Eu tenho vários arquivos zip em uma determinada pasta. Eu quero capturar o nome do arquivo e o tamanho dos arquivos em um formato CSV no dia a dia e colocá-lo no crontab para que eu possa relatar em uma base diária e, em seguida, enviá-lo em cada relatório.

Os arquivos estão em /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

Agora, quero criar um cronjob para executar todos os dias e capturar o mesmo CSV que preparamos no dia.

exemplo 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"
    
por test 03.06.2014 / 09:19

2 respostas

1

uma maneira simples de fazer isso seria colocar um script:

#!/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

Isso removerá a soma no início do ls e também excluirá os diretórios.

    
por 03.06.2014 / 10:01
0

Aqui vai você.

#!/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

Resultado:

$ 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"
    
por 03.06.2014 / 09:55