특정 폴더에 많은 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
이제 매일 실행하고 매일 준비하는 것과 동일한 CSV를 캡처할 cronjob을 만들고 싶습니다.
예 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"
답변1
이를 수행하는 쉬운 방법은 스크립트를 작성하는 것입니다.
#!/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로 시작하는 합계가 제거되고 디렉토리는 제외됩니다.
답변2
여기요.
#!/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"