Отримайте абсолютний шлях до файлів за допомогою команди «знайти»


26

Чи є спосіб отримати абсолютний шлях до файлу, який шукається?

Наприклад:

find .. -name "filename"

Це дає мені такі результати, ../filenameале я хочу повний шлях.

Що мені потрібно - це знайти в батьківському каталозі та його дітях для конкретного файлу, який я згодом використовуватиму в іншому сценарії.

Спасибі


Відповіді:


15

Спробуйте щось на кшталт:

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

Спасибі, я просто тестував $(cd ..; pwd). Тут це працює добре, але якщо я це роблю поодинці в Терміналі, я не можу отримати батьківський dir ... Я отримую "Bash: <dir>: Є каталог. І якщо мені це $(cd ..; echo "something")дістається" щось: не a команда "
JorgeeFG

Ви маєте на увазі як окрему команду? Тоді вам потрібно буде залишити знак долара:(cd ..; pwd)
Scrutinizer

Спасибі, це було все. Будь-яке посилання на те, чому я повинен видалити $, як це впливає на нижню частину корпусу?
JorgeeFG

1
Так ( ... )означає виконати в нижній частині, вихід буде записаний в stdout. $( ... )означає "заміна команд". Останнє можна використовувати так, ніби воно було змінним розширенням.
Scrutinizer

find / -name "filename"
Пантера

12

Спробуйте скористатися -execопцією find:

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

Примітка: readlinkдрукує значення символічної посилання або канонічного імені файлу.


це викликатиме readlink на кожному файлі, тому це буде дуже неефективно.
bac0n

9

Ви можете використовувати bashрозширення Tilde для отримання абсолютного шляху поточного робочого каталогу, а також 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.