디렉터리와 파일로 구성된 bash 함수에 인수를 전달합니다. 다음 코드는 배열을 보기 전에 매개변수의 유효성을 검사합니다 fdir
.
declare -A tag
for arg in "$@"; do
printf '%s\n' "arg: $arg"
[[ -d "$arg" || -f "$arg" ]] || continue
[[ ${tag[$arg]} ]] && continue
fdir+=("$arg")
tag[$arg]=1
done
fdir
마지막으로 내용을 find에 전달 하면 일치하는 파일에서 실행 command
됩니다 .head
local _GREP="/bin/grep --color"
hn=13
sufx=( \( -name '*.sh' -o -name '*.c' \) )
mxdpt=( -maxdepth 3 )
find "${fdir[@]}" -type f "${sufx[@]}" "${mxdpt[@]}" \
-exec head -v -n "$hn" '{}' +
sufx
file 명령에서 을 사용하고 있기 때문에 다른 유형의 파일(예: /home/flora/file.org
) 을 전달하면 find
일치하는 항목을 찾을 수 없습니다.
한 가지 해결책은 배열의 파일 앞에 디렉터리를 넣는 것입니다 fdir
. 각 요소를 반복하고 fdir
첫 번째 파일이 감지되는 즉시 설정합니다.sufx=()
declare -A tag
local daggr=()
for arg in "$@"; do
[[ ! -d "$arg" ]] || continue
[[ ${tag[$arg]} ]] && continue
daggr+=("$arg")
tag[$arg]=1
done
local faggr=()
for arg in "$@"; do
[[ ! -f "$arg" ]] && continue
[[ ${tag[$arg]} ]] && continue
faggr+=("$arg")
tag[$arg]=1
done
fdir=( "${daggr[@]}" "${faggr[@]}" )
for (( i=0 ; i < $n ; i++ )); do
[[ -f "${fdir[$i]}" ]] && { sufx=() ; mxdpt=() ; }
find "${fdir[$i]}" -type f "${sufx[@]}" "${mxdpt[@]}" \
-exec head -v -n "$hn" '{}' +
done
제가 시도해 볼 수 있는 더 좋고 간단한 접근 방식에 대한 제안이 있습니까?
답변1
먼저 다음을 인용해야 합니다.
sufx=( \( -name '*.sh' -o -name '*.c' \) )
find
전달된 디렉토리 -exec
의 모든 파일 에 적용되지만 "${fdir[@]}"
전달된 디렉토리의 일부 파일에만 적용되는 경우 간단한 접근 방식은 두 가지 find
호출을 수행하는 것입니다.
find "${fdir[@]}" -maxdepth 0 -type f -exec head -v -n "$hn" '{}' +
find "${fdir[@]}" -mindepth 1 -type f "${sufx[@]}" "${mxdpt[@]}" \
-exec head -v -n "$hn" '{}' +