команда find с абсолютными путями, если результатом является файл / dir - PullRequest
0 голосов
/ 12 января 2012

Я хотел бы связать команду find в linux с функцией, которая будет печатать абсолютный путь, если результатом команды find является файл или каталог в файловой системе?

Вот что ядошел до сих пор, но это не работает правильно.


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

Есть идеи, что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 05 сентября 2012

Адаптация ответа siegex выше, который работает с ZSH:

# usage: afind . -name \*.html
afind() { baseDir=$(readlink -f $1); shift; command find $baseDir "$@" }
2 голосов
/ 12 января 2012
## 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 в вашей функции.Ваша функция может быть использована для получения ввода и вывода абсолютного пути.

0 голосов
/ 12 января 2012

Лучшее решение - превратить путь, заданный для find, в абсолютный путь до вызова команды.Этот следующий bash 1-liner делает именно это, перехватывая команду find, манипулируя путем и затем вызывая реальную команду find.

find(){ ( set -f; command find $(readlink -f $1) ${@:2}; ) };
...