특정 폴더에 많은 zip 파일이 있습니다. 파일 이름과 파일 크기를 하루에 한 파일씩 파일 이름과 크기가 포함된 csv 형식으로 캡처하고 싶습니다. 파일 이름에는 날짜가 포함되어 있습니다.
파일은 다음 위치에 있습니다./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
"XXXXX_20140530_0401_28.txt.gz","9.3","May 30"
"XXXXX_20140530_0401_29.txt.gz","9.3","May 30"
test31052014.csv
"XXXXX_20140531_0401_01.txt.gz","9.3","May 31"
답변1
시스템에 GNU coreutils가 있는 경우 사람이 읽을 수 있는 파일 크기를 얻는 가장 쉽고 안정적인 방법은 명령을 사용하는 것입니다 du
. 원하는 형식으로 출력을 인쇄하려면 bash를 사용하여 다음을 수행할 수 있습니다.
#!/bin/bash
while read -rd $'\0' size name
do
printf '"%s","%s"\n' "${name##*/}" "$size"
done < <(du -0h /somedirectory/archive/test/XXXXX_20140530_*.gz)
답변2
왜 빠른 쉘 스크립트를 사용하지 않는가? (예를 들어 size.sh라고 부르자):
#!/bin/bash
IFS='
'
for LINE in $(ls -1s --block-size=k|tail -n +2); do
echo $LINE|awk '{ print "\""$2"\",\""$1"\"" }'
done
크기는 킬로바이트 단위로 일관되게 출력되며 스크립트의 출력을 파일로 리디렉션할 수 있습니다.
size.sh > $(date +%Y-%m-%d).csv