Мне нужен простой способ получить полный путь к файлу. Сейчас я набираю это:
echo `pwd`/file.ext
Пытаясь сократить его, я сделал псевдоним bash :
alias fp = 'echo `pwd`/'
Но теперь, если я наберу fp файл .ext
, между /
и file.ext
появляется пробел.
Имеет такая команда уже существует, и мне ее не хватает? Если нет, как мне создать такой псевдоним или функцию в bash?
В системах Linux у вас должен быть readlink
из Проект GNU coreutils установлен и может делать следующее:
readlink -f file.ext
Системы Debian/ubuntu могут иметь реальный путь установлена служебная программа, которая «обеспечивает в основном те же функции, что и /bin/readlink -f
в пакете coreutils.»
Вы можете использовать:
realpath file.ext
7
Вместо команды pwd
используйте PWD
переменная (она также есть в POSIX):
fp () {case "$ 1" in/*) printf '% s n' "$ 1" ;; *) printf '% s n' "$ PWD/$ 1" ;; esac}
Если вам нужна поддержка Windows, распознавание абсолютных путей будет более сложным, так как каждый порт инструментов unix имеет свои собственные правила для преобразования путей к файлам. В Cygwin используйте утилиту cygpath
.
2
Из https://stackoverflow.com/a/3915420/5795941
Это единственный приемлемый для меня способ. Не расширяет ссылки, такие как realpath и readlink, и это классический способ, который я видел повсюду.
#! /bin/shecho "$ (cd" $ (dirname "$ 1") "; pwd -P)/$ (basename" $ 1 ")"
1
, чтобы ответить на ваш вопрос, что вы сейчас используете:
псевдоним расширяется в позиции, где вы печатаете прямо сейчас. вы набрали:
% fp file.ext
это будет
% echo `pwd` file.exe
вы можете использовать функцию, чтобы этого избежать:
function fp () {echo `pwd`/" $ 1 "}
вы можете использовать это как обычно:
% fp файл. ext
6
Получите абсолютный путь к файлам с помощью ‘find ‘command
Есть ли способ получить абсолютный путь к файлу, в котором выполняется поиск?
Например:
find .. -name "filename"
Это дает мне такие результаты, как ../filename
, но мне нужен полный путь.
Что мне нужно, так это найти в родительском каталоге и его дочерних каталогах конкретный файл, который я позже буду использовать в другом скрипте.
Спасибо
Попробуйте что-нибудь вроде:
find "$ (cd ..; pwd)" -name "filename"
Вы можете использовать расширение тильды bash
, чтобы получить абсолютный путь к текущий рабочий каталог, таким образом find
также печатает абсолютный путь для результатов:
find ~ + -type f -name " filename "
Если выполняется в ~/Desktop , это расширяется до
find/home/yourusername/Desktop -type f -name "filename"
и печатает такие результаты, как:
/home/yourusername/Desktop/filename
Если вы хотите используйте этот подход с parent текущего рабочего каталога, который вам необходимо cd перед вызовом find
:
cd .. && find ~ + -type f -name "filename"
0
Попробуйте использовать параметр -exec
в find
:
find .. -name "filename" -exec readlink -f {} ;
Примечание: readlink
печатает значение символической ссылки или канонического имени файла.
2
Самый простой способ —
найти "$ (pwd -P)" -name "filename"
2
У меня это сработало, но верну только первое вхождение.
realpath $ (найти. -type f -name filename -print -quit)
Чтобы получить полные пути для всех вхождений (по предложению Сергея Колодяжного)
найти. -type f -name имя_файла | xargs realpath
3
Также использование PWD может показать вам полный каталог. Pwd покажет вам все ваши каталоги, в которых вы находитесь, как расширение имени файла. Надеюсь, это помогло.
Удаление последнего компонента каталога с параметром Expansion.
find "$ {PWD%/*}" -name 'filename'
Пример того, как вы можете использовать файл карты для сохранения результатов поиска в индексированный массив для дальнейшего использования.
mapfile -t -d ''
(если имя массива не указано, MAPFILE будет именем массива по умолчанию).
для i в "$ {MAPFILE [ @]} "; do echo "$ ((n ++)) $ i" готово