回答編集履歴

2 追記

otn

otn score 46442

2016/10/06 13:56  投稿

やろうとすると、
```Bash
find ~~~ |
while read a
do dir=$(dirname "$a")
  if [ "$dir" != "$last" ]
  then echo
       echo $dir: 見出し
       last="$dir"
  fi
  echo "$a"
done
```
ですが、
```
/foo/bar: 見出し
/foo/bar/aaa
/for/bar/bbb
/foo/bar/baz: 見出し
/foo/bar/baz/111
/foo/bar/baz/222
/foo/bar: 見出し
/foo/bar/ccc
/foo/bar/ddd
```
みたいになっちゃいますね。こういう風に 「/foo/bar: 見出し」が複数に別れるのを防止しようとすると、かなり面倒。
#追記
ファイル名の前に、属性などがある場合は、ファイル名に空白が含まれない前提で、
```Bash
find ~~~ |
while read a
do dir=$(dirname "${a##* }")
  if [ "$dir" != "$last" ]
  then echo
       echo $dir: 見出し
       last="$dir"
  fi
  echo "$a"
done
```
```
#追記の2「順番入れ替え版」
%h(ディレクトリ名)を先頭に付加して、ソートキーにする。
同じくファイル名に空白が含まれない前提。
```Bash
find ~~ -printf "%h %M %2n %10s %TY-%Tm-%Td %TH:%TM %p\n" |
sort -t$'\t' -k1 |
while read a b
do if [ "$a" != "$last" ]
  then echo
       echo $a: 見出し
       last="$a"
  fi
  echo "$b"
done
```
1 追記

otn

otn score 46442

2016/10/04 11:33  投稿

やろうとすると、
```Bash
find ~~~ |
while read a
do dir=$(dirname "$a")
  if [ "$dir" != "$last" ]
  then echo
       echo $dir: 見出し
       last="$dir"
  fi
  echo "$a"
done
```
ですが、
```
/foo/bar: 見出し
/foo/bar/aaa
/for/bar/bbb
/foo/bar/baz: 見出し
/foo/bar/baz/111
/foo/bar/baz/222
/foo/bar: 見出し
/foo/bar/ccc
/foo/bar/ddd
```
みたいになっちゃいますね。こういう風に 「/foo/bar: 見出し」が複数に別れるのを防止しようとすると、かなり面倒。
みたいになっちゃいますね。こういう風に 「/foo/bar: 見出し」が複数に別れるのを防止しようとすると、かなり面倒。
#追記
ファイル名の前に、属性などがある場合は、ファイル名に空白が含まれない前提で、
```Bash
find ~~~ |
while read a
do dir=$(dirname "${a##* }")
  if [ "$dir" != "$last" ]
  then echo
       echo $dir: 見出し
       last="$dir"
  fi
  echo "$a"
done
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る