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


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

/home/ken/foo/bar

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

./foo/bar   (from the folder ken)

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

10 204

10 ответов:

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

find `pwd` -name .htaccess

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

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

readlink -f filename 

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

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

ls -d -1 $PWD/**

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

ls -d -1 $PWD/*.*

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

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

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

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

find $PWD 

В Баш

ls -d $PWD/*

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

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

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

/ home / ken/foo / bar

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

Найти /home / ken/foo-name bar-exec ls-l {}; \

Примечание: между {} и ;

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

- rw-r-r - 1 Ken admin 181 Jan 27 15: 49 / home/ken/foo / bar

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

Найти / - name bar-exec ls-l {}; \ 2> /dev / null

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

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

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

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

Или если вам нужны все файлы:

find $PWD -type f

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

lspwd() { for i in $@; do ls -d -1 $PWD/$i; done }
ls -1 | awk  -vpath=$PWD/ '{print path$1}'

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