我想将linux中的find命令别名为一个函数,如果find命令的输出是文件系统上的文件或目录,它将打印绝对路径?
这是我到目前为止所得到的,但它无法正常工作。
find_with_abspath(){
for i in $(find "$@")
do
if [ -e "$i" ];
then
readlink -m "$i"
else
echo -n "$i"
fi
done
}
任何想法我做错了什么?
答案 0 :(得分:2)
## define your function
abspath() {
while read -r; do
[[ -d $REPLY || -f $REPLY ]] && readlink -m "$REPLY"
done
}
## run as:
$ find foo -iname "*.png" | abspath
## or:
$ abspath < <(find .. -.. ..)
您无需在功能中重新定义find
。您的函数可用于获取输入,并打印绝对路径。
答案 1 :(得分:2)
上面的siegex答案适用于ZSH:
# usage: afind . -name \*.html
afind() { baseDir=$(readlink -f $1); shift; command find $baseDir "$@" }
答案 2 :(得分:0)
最佳解决方案是在调用命令之前将给定find
的路径转换为绝对路径。以下bash 1-liner通过拦截find
命令,操纵路径然后调用真实find
命令来完成此操作。
find(){ ( set -f; command find $(readlink -f $1) ${@:2}; ) };