Как я могу перечислить файлы с их абсолютным путем в 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.
Ответ 8
lspwd() { for i in [email protected]; do ls -d -1 $PWD/$i; done }
Ответ 9
ls -1 | awk -vpath=$PWD/ '{print path$1}'
Ответ 10
find / -print
сделает это