파일 이름과 파일 크기를 CSV 형식으로 캡처하는 쉘 스크립트

파일 이름과 파일 크기를 CSV 형식으로 캡처하는 쉘 스크립트

특정 폴더에 많은 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

관련 정보