Получить абсолютный путь к файлам с помощью команды "найти"

Есть ли способ получить абсолютный путь к файлу, в котором выполняется поиск?

Например:

find .. -name "filename"

Это дает мне такие результаты, как ../filename но мне нужен полный путь.

Что мне нужно, так это найти в родительском каталоге и его дочерних элементах определенный файл, который я позже буду использовать в другом скрипте.

Спасибо

Вы можете использовать bashрасширение тильды, чтобы получить абсолютный путь к текущему рабочему каталогу, таким образом find выводит абсолютный путь для результатов, а также:

find ~+ -type f -name "filename"

Если выполняется в ~/Desktop, это расширяется до

find /home/yourusername/Desktop -type f -name "filename"

и выводит результаты, подобные:

/home/yourusername/Desktop/filename

Если вы хотите использовать этот подход с текущим рабочим каталогом родитель каталог, который вам нужен для cd прежде чем позвонить find:

cd .. && find ~+ -type f -name "filename"

Попробуйте что-то вроде:

find "$(cd ..; pwd)" -name "filename"

Попробуйте использовать -exec возможность find:

find .. -name "filename" -exec readlink -f {} \;

Примечание: readlink выводит значение символьной ссылки или канонического имени файла.

Самый простой способ - это

find "$(pwd -P)" -name "filename"

Это сработало для меня, но вернет только первое вхождение.

realpath $(find . -type f -name filename -print -quit)

Чтобы получить полные пути для всех вхождений (как предложил Сергей Колодяжный)

find . -type f -name filename | xargs realpath

Также с помощью PWD можно показать вам полный каталог. Pwd покажет вам все ваши директории, в которых вы находитесь, например, расширение имени файла. Надеюсь, это помогло.

Удаление последнего компонента каталога с помощью расширение параметров.

find "${PWD%/*}" -name 'filename'

Пример того, как вы можете использовать файл карты чтобы сохранить выходные данные из find в индексированный массив для последующего использования.

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(если имя массива не указано, MAPFILE будет именем массива по умолчанию).

for i in "${MAPFILE[@]}"; do    echo "$((n++)) $i"done

Попробуйте этот способ:

find $PWD -name "filename"

Аналогичный вопрос по SO.