特定のフォルダに多くのzipファイルがあります。ファイル名とファイルサイズを1日に1ファイルずつファイル名とサイズを含む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