csv 파일의 파일 이름과 크기를 캡처하고 파일에 헤더를 추가하는 셸 스크립트

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

이제 매일 실행하고 매일 준비하는 것과 동일한 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"

관련 정보