Как я могу перечислить файлы с их абсолютным путем в Linux?

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

/home/ken/foo/bar

но насколько я вижу, как ls, так и find предоставляют только относительные списки путей

./foo/bar   (from the folder ken)

Это кажется очевидным требованием, но я не вижу ничего в man-страницах find или ls.

Ответ 1

Если вы даете find абсолютный путь для начала, он будет печатать абсолютные пути. Например, чтобы найти все файлы .htaccess в текущем каталоге:

find `pwd` -name .htaccess

find просто добавляет путь, который он дал относительному пути к файлу с этого пути.

Грег Хьюглилл также предложил использовать pwd -P, если вы хотите разрешить символические ссылки в своем текущем каталоге.

Ответ 2

readlink -f filename 

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

Ответ 3

Используйте это для dirs:

ls -d -1 $PWD/**

это для файлов:

ls -d -1 $PWD/*.*

это для всего:

ls -d -1 $PWD/**/*

Взято отсюда http://www.zsh.org/mla/users/2002/msg00033.html

Ответ 4

Вы можете использовать

find $PWD 

в bash

Ответ 5

ls -d $PWD/*

Ответ 6

Если вы дадите команде find абсолютный путь, он вытолкнет результаты с помощью абсолютного пути. Итак, из каталога Ken, если вы хотите ввести:

find/home/ken/foo/-name bar -print
(вместо относительного пути find. -name bar -print)

Вы должны получить:

/дома/кен/Foo/бар

Следовательно, если вы хотите ls -l и вернете ему абсолютный путь, вы можете просто сказать команде find выполнить ls -l во всех найденных.

find/home/ken/foo -name bar -exec ls -l {};\

ПРИМЕЧАНИЕ. Между {} и;

существует пробел,

Вы получите что-то вроде этого:

-rw-r - r-- 1 ken admin 181 27 янв. 15:49/home/ken/foo/bar

Если вы не знаете, где находится файл, вы всегда можете изменить местоположение поиска. Пока путь поиска начинается с "/", вы получите абсолютный путь в обратном порядке. Если вы ищете местоположение (например,/), где вы хотите получить много разрешенных прав, я рекомендую перенаправить стандартную ошибку, чтобы вы могли увидеть результаты поиска:

find/-name bar -exec ls -l {};\2 > /dev/null

(2 > является синтаксисом для переносимых и bash оболочек, но не будет работать с оболочкой C. Он может работать и в других оболочках, но я точно знаю, что он работает в bourne и bash).

Надеюсь, это поможет!

Ответ 7

$PWD - хороший вариант, описанный выше. Если вы хотите найти только файлы для печати, вы также можете добавить параметр -type f для поиска только обычных файлов. Другими параметрами являются "d" только для каталогов и т.д. Так что в вашем случае это будет (если я хочу искать только файлы с .c ext):

find $PWD -type f -name "*.c" 

или если вы хотите все файлы:

find $PWD -type f

Примечание. Вы не можете сделать псевдоним для указанной выше команды, потому что $PWD автоматически завершается в ваш домашний каталог, когда псевдоним устанавливается bash.

Ответ 9

ls -1 | awk  -vpath=$PWD/ '{print path$1}'

Ответ 10

find / -print сделает это