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


26

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

Например:

find .. -name "filename"

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

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

Благодарность


Ответы:


15

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

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

Спасибо, я просто тестировал $(cd ..; pwd). Здесь все работает хорошо, но если я делаю это один в терминале, я не могу получить родительский каталог ... Я получаю "Bash: <каталог>: каталог. И если $(cd ..; echo "something")я получаю, я получаю" что-то: не команда "
JorgeeFG

Вы имеете в виду как отдельную команду? Тогда вам нужно будет пропустить знак доллара:(cd ..; pwd)
Scrutinizer

Спасибо, вот и все. Любая ссылка, почему я должен удалить $, как это влияет на подоболочку?
JorgeeFG

1
Да ( ... )означает выполнение в подоболочке, вывод записывается в стандартный вывод. $( ... )расшифровывается как «подстановка команд». Последний может быть использован, как если бы это было расширение переменной.
Scrutinizer

find / -name "filename"
Panther

12

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

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

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


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

9

Вы можете использовать bashTilde Expansion, чтобы получить абсолютный путь к текущему рабочему каталогу, таким образом, также 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"


1

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


1

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

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

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

find . -type f -name filename | xargs realpath

Предыдущий комментарий удален, +1, хорошая работа @Wyrmwood
Сергей Колодяжный

1

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

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

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

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

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

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.