#!/usr/bin/env bash set -euo pipefail ROOT="." declare -a SKIP_DIRS=() declare -a PATTERNS=() usage() { cat < 0 )) || usage # Build prune expression PRUNE_EXPR=() if (( ${#SKIP_DIRS[@]} > 0 )); then PRUNE_EXPR+=( \( ) for i in "${!SKIP_DIRS[@]}"; do PRUNE_EXPR+=( -type d -name "${SKIP_DIRS[$i]}" -prune ) [[ $i -lt $((${#SKIP_DIRS[@]} - 1)) ]] && PRUNE_EXPR+=( -o ) done PRUNE_EXPR+=( \) -o ) fi # Build pattern expression PATTERN_EXPR=( \( ) for i in "${!PATTERNS[@]}"; do PATTERN_EXPR+=( -name "${PATTERNS[$i]}" ) [[ $i -lt $((${#PATTERNS[@]} - 1)) ]] && PATTERN_EXPR+=( -o ) done PATTERN_EXPR+=( \) ) # Execute find "$ROOT" \ "${PRUNE_EXPR[@]}" \ -type f \ "${PATTERN_EXPR[@]}" \ -print0 | while IFS= read -r -d '' file; do printf "\n===== %s =====\n" "$file" cat "$file" done