Рекурсивный список всех файлов в каталоге, включая файлы в каталогах символических ссылок
Предположим, что у меня есть каталог /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 {} +