Skip to content

Instantly share code, notes, and snippets.

@ytomino
Last active September 24, 2019 21:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ytomino/7d72c16aa51aa032850f8876db78222a to your computer and use it in GitHub Desktop.
Save ytomino/7d72c16aa51aa032850f8876db78222a to your computer and use it in GitHub Desktop.
cd to the result of mdfind (Spotlight) / baloosearch
function mdcd {
local OPTARG OPTIND REPLY
local opt list dryrun query a s len home i ilen ihome
# switches
list=
dryrun=
OPTIND=
while getopts "ln" opt; do
case $opt in
l) list=1 ;;
n) dryrun=1 ;;
esac
done
shift $(( $OPTIND - 1 ))
# query
declare -a F
query="(kMDItemDisplayName == '$1' || kMDItemFSName == '$1') && kMDItemContentTypeTree == 'public.directory'"
while IFS= read -r -d ''; do a+=( "$REPLY" ); done \
< <( mdfind -0 "$query" )
# select
s=
len=0
home=
for i in "${a[@]}"; do
[[ -z "$i" ]] && continue
ilen=${#i}
ihome=
[[ -n $list ]] && echo "$i"
[[ ${i:0:${#HOME}} == $HOME ]] && ihome=1
[[ -n $home && -z $ihome ]] && continue
if [[ -z "$s" || $ilen -lt $len ]]; then
s="$i"
len=$ilen
home=$ihome
fi
done
# finish
if [[ -z "$s" ]]; then
echo "mdcd: no such file or directory: $1" > /dev/stderr
return 1
else
[[ -n $list ]] && return 0
[[ -n $dryrun ]] && echo "$s" && return 0
cd "$s"
fi
}
function mdcd {
local OPTARG OPTIND REPLY
local opt list dryrun query a s len home i ilen ihome
# switches
list=
dryrun=
OPTIND=
while getopts "ln" opt; do
case $opt in
l) list=1 ;;
n) dryrun=1 ;;
esac
done
shift $(( $OPTIND - 1 ))
# query
declare -a F
query="filename:'$1'"
while IFS= read -r; do a+=( "$REPLY" ); done \
< <( baloosearch -t folder "$query" 2> /dev/null )
# select
s=
len=0
home=
for i in "${a[@]}"; do
[[ -z "$i" ]] && continue
[[ "${i##/*/}" != "$1" ]] && continue # exact match
ilen=${#i}
ihome=
[[ -n $list ]] && echo "$i"
[[ ${i:0:${#HOME}} == $HOME ]] && ihome=1
[[ -n $home && -z $ihome ]] && continue
if [[ -z "$s" || $ilen -lt $len ]]; then
s="$i"
len=$ilen
home=$ihome
fi
done
# finish
if [[ -z "$s" ]]; then
echo "mdcd: no such file or directory: $1" > /dev/stderr
return 1
else
[[ -n $list ]] && return 0
[[ -n $dryrun ]] && echo "$s" && return 0
cd "$s"
fi
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment