Как я могу перечислить файлы с их абсолютным путем в linux? [закрытый]
Я хочу генерировать рекурсивные списки файлов с полными путями
/home/ken/foo/bar
Но насколько я могу видеть, и ls
, и find
дают только относительные списки путей
./foo/bar (from the folder ken)
Это кажется очевидным требованием, но я ничего не вижу в find
или ls
man-страницах.
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 абсолютный путь, она выдаст результаты с абсолютным путем. Итак, из каталога 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.