touch "$meta" # preliminary touch to prevent concurrent generators
find "$dir" -type f -mindepth 1 -maxdepth 1 \
| grep -aE "$file_pattern" \
- | while v="$(line)"; do
+ | while read -r v; do
meta_line "$v"
done >"$meta"
RELEASE "$meta"
elif [ -d "$dir/.index" -a "$dir" -nt "$meta" ] && LOCK "$meta"; then
- touch "$meta"
- find "$dir" -type f -mindepth 1 -maxdepth 1 \
+ cp -p "$meta" "$meta.ref"; touch "$meta"
+ find "$dir" -type f -newer "$meta.ref" \
+ -mindepth 1 -maxdepth 1 \
| grep -aE "$file_pattern" \
- | while v="$(line)"; do
- if [ "$v" -nt "$meta" ]; then
- grep -qF " $(meta_name "$v")" "$meta" \
- || meta_line "$v"
- fi
+ | while read -r v; do
+ grep -qF " $(meta_name "$v")" "$meta" \
+ || meta_line "$v"
done >>"$meta"
+ rm "$meta.ref"
RELEASE "$meta"
fi