如果result是文件/目录,则查找具有绝对路径的命令

时间:2012-01-12 00:49:15

标签: bash path find

我想将linux中的find命令别名为一个函数,如果find命令的输出是文件系统上的文件或目录,它将打印绝对路径?

这是我到目前为止所得到的,但它无法正常工作。


find_with_abspath(){
    for i in $(find "$@")
    do
        if [ -e "$i" ];
        then
            readlink -m "$i"
        else
            echo -n "$i"
        fi
    done
}

任何想法我做错了什么?

3 个答案:

答案 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}; ) };