LINUX Рекурсивный список всех файлов в каталоге, включая файлы в каталогах символических ссылок - PullRequest
123 голосов
/ 20 сентября 2008

Предположим, у меня есть каталог /dir, внутри которого есть 3 символические ссылки на другие каталоги. /dir/dir11, /dir/dir12 и /dir/dir13. Я хочу перечислить все файлы в dir, включая файлы в dir11, dir12 и dir13.

Чтобы быть более общим, я хочу перечислить все файлы, включая файлы в каталогах, которые являются символическими ссылками. find ., ls -R и т. Д. Останавливаются на символической ссылке, не заходя в них, чтобы получить дальнейший список.

Ответы [ 8 ]

195 голосов
/ 20 сентября 2008

Опция -L для ls выполнит то, что вы хотите. Разыменовывает символические ссылки.

Итак, ваша команда будет:

ls -LR

Вы также можете сделать это с помощью

find -follow

Опция -follow направляет поиск по символическим ссылкам на каталоги.

В Mac OS X используйте

find -L

как -follow устарело.

110 голосов
/ 20 сентября 2008

Как насчет дерева ? tree -l будет следовать символическим ссылкам.

Отказ от ответственности : я написал этот пакет.

43 голосов
/ 20 сентября 2008
find /dir -type f -follow -print

-type f означает, что он будет отображать реальные файлы (не символические ссылки)

-follow означает, что он будет следовать символическим ссылкам вашего каталога

-print приведет к отображению имен файлов.

Если вы хотите отображение типа ls, вы можете сделать следующее

find /dir -type f -follow -print|xargs ls -l
8 голосов
/ 20 сентября 2008

Использование ls:

  ls -LR

из 'man ls':

   -L, --dereference
          when showing file information for a symbolic link, show informa‐
          tion  for  the file the link references rather than for the link
          itself

Или, используя find:

find -L .

Из справочной страницы поиска:

-L     Follow symbolic links.

Если вы обнаружите, что хотите следовать только за несколькими символическими ссылками (как, возможно, только упомянутые вами вышеупомянутые), вам следует обратиться к опции -H, которая следует только за символическими ссылками, которые вы передаете ей. в командной строке.

5 голосов
/ 03 августа 2012
find -L /var/www/ -type l

# man find
-L     Follow  symbolic links.  When find examines or prints information about files, the information used shall be taken from the

свойства файл, на который указывает ссылка, а не из самой ссылки (если это не битая символическая ссылка или поиск не может изучить файл, чтобы на которую указывает ссылка). Использование этой опции подразумевает -noleaf. Если вы позже используете опцию -P, -noleaf все равно будет действовать. Если -L это в результате и find обнаруживает символическую ссылку на подкаталог во время поиска, подкаталог, на который указывает символическая ссылка будет искать.

3 голосов
/ 31 июля 2014

Я знал, что tree подходит, но у меня не было установленного дерева. Итак, я получил довольно близкую альтернативу здесь

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/'
2 голосов
/ 20 сентября 2008
ls -R -L

-L разыменовывает символические ссылки. Это также сделает невозможным просмотр каких-либо символических ссылок на файлы - они будут выглядеть как файлы, на которые указывают ссылки.

0 голосов
/ 27 июля 2018

на случай, если вы хотите распечатать весь файл содержимое : find . -type f -exec cat {} +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...