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

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

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

Ответ 1

Параметр -L для ls выполнит то, что вы хотите. Это разделяет символические ссылки.

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

ls -LR

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

find -follow

Параметр -follow позволяет находить, чтобы следовать символическим ссылкам на каталоги.

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

find -L

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

Ответ 2

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

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

Ответ 3

find /dir -type f -follow -print

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

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

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

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

find /dir -type f -follow -print|xargs ls -l

Ответ 4

Используя ls:

  ls -LR

from '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 .

На странице справки find:

-L     Follow symbolic links.

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

Ответ 5

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

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

Ответ 6

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

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/'

Ответ 7

ls -R -L

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

Ответ 8

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