Доберитесь полный путь использования файлов 'находят' команду

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

Например:

find .. -name "filename"

Это дает мне результаты как ../filename но я хочу полный путь.

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

Спасибо

23
задан 7 April 2014 в 22:21

7 ответов

Попробуйте что-то как:

find "$(cd ..; pwd)" -name "filename"
14
ответ дан 16 November 2019 в 12:02

Попытайтесь использовать -exec опция find:

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

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

12
ответ дан 16 November 2019 в 12:02

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

find ~+ -type f -name "filename"

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

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

и печатает результаты как:

/home/yourusername/Desktop/filename
8
ответ дан 16 November 2019 в 12:02

Самый простой путь

find "$(pwd -P)" -name "filename"
7
ответ дан 16 November 2019 в 12:02

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

1
ответ дан 16 November 2019 в 12:02

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

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

Получить полные пути для всех случаев (как предложено Sergiy Kolodyazhnyy)

find . -type f -name filename | xargs realpath
1
ответ дан 23 November 2019 в 01:26

Удаление последнего компонента каталога с Расширением параметра.

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

Пример того, как можно использовать mapfile для сохранения вывода от находки до индексного массива для более позднего использования.

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

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

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
1
ответ дан 23 November 2019 в 01:26

Другие вопросы по тегам:

Похожие вопросы: