#!/usr/bin/env zsh setopt ERR_EXIT EXTENDED_GLOB for d (**/*(/)) { list=() for f ($d/*.info(onN)) list=($list $f:t:r) [[ ${#list} != 0 ]] || continue print ${(F)list} > $d/list touch -r $d/${list[-1]}.info $d/list }