[arch-projects] [dbscripts] [PATCH v2 3/5] db-update: replace external find command with bash globbing
Luke Shumaker
lukeshu at lukeshu.com
Mon Feb 19 21:53:12 UTC 2018
On Mon, 19 Feb 2018 15:11:43 -0500,
Eli Schwartz via arch-projects wrote:
> --- a/db-update
> +++ b/db-update
> @@ -9,9 +9,14 @@ if (( $# >= 1 )); then
> fi
>
> # Find repos with packages to release
> -if ! staging_repos=($(find "${STAGING}" -mindepth 1 -type f -name "*${PKGEXTS}" -printf '%h\n' | sort -u)); then
> - die "Could not read %s" "$STAGING"
> -fi
> +mapfile -t -d '' staging_repos < <(
> + for f in "${STAGING}"/**/*${PKGEXTS}; do
> + f="${f%/*}"
> + if [[ -d $f ]]; then
> + printf '%s\0' "$f"
> + fi
> + done | sort -uz
> +)
>
> repos=()
> for staging_repo in ${staging_repos[@]##*/}; do
Isn't [[ -d ]] there redundant? If globbing gave us $dir/file, of
course $dir is a directory!
Meanwhile, this dropped the `-type f` check, though I'm not sure how
important that was.
Shouldn't this be written as:
mapfile -t -d '' staging_repos < <(
for f in "${STAGING}"/**/*${PKGEXTS}; do
if [[ -f $f && ! -h $f ]]; then
printf '%s\0' "${f/*}"
fi
done | sort -uz
)
The original `find` command rejected symlinks; I don't know if that's
an important property; but that's what the `&& ! -h $f` bit is for.
--
Happy hacking,
~ Luke Shumaker
More information about the arch-projects
mailing list