Как получить полный путь к файлу в bash?

Мне нужен простой способ получить полный путь к файлу. Сейчас я набираю это:

  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" готово  

Оцените статью
clickpad.ru
Добавить комментарий