この記事は約2分18秒で読むことができます。

treeコマンドとjqでfiledumpコマンドを作った

ディレクトリ名を引数に与えて実行し、標準出力にtsv形式で出力するコマンド

ディレクトリ名はカレントディレクトリ名でもいい(ドットだけでもOK)

相対パス指定はだめ(../unkoみたいなのはNG)

基本は正規化したパスで指定する

contentsがなくなるまで再帰処理をjqで行っている

出力内容のヘッダ行と最終行と明細一行目を除くと最終行のレポーティング件数と一致する

引数に指定したディレクトリ名の権限等は出力されないので、そのディレクトリ名より一つ上のディレクトリ名を指定して実行する

 


#!/usr/bin/env bash
usage(){

cat <<EOS
Usage:

CMD: ${0##*/} /bin

EOS

exit 0

}

TARGET_DIR_NAME=$1;shift;

if [ -z $TARGET_DIR_NAME ];then

usage

fi

if ! [ -d $TARGET_DIR_NAME ];then

usage

fi

time tree -a -ugpfhqD --timefmt '%Y-%m-%dT%H:%M:%S' -J $TARGET_DIR_NAME | \
sed -r 's;\\;\\\\;g;' | \
jq -r 'def UNKO:select(.!=null)|if(has("contents")) then ([.type,.name,.mode,.prot,.user,.group,.size,.time,.directories,.files]),(.contents[]|UNKO)else [.type,.name,.mode,.prot,.user,.group,.size,.time,.directories,.files] end;.[]|UNKO|@tsv' | \
sed '1itype\tname\tmode\tprot\tuser\tgroup\tsize\tlast-modified\tdirectories\tfiles'

Leave a Reply

Your email address will not be published. Required fields are marked *