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


147

Припустимо , у мене є каталог , /dirв якому є 3 символічні посилання на інші каталоги /dir/dir11, /dir/dir12і /dir/dir13. Я хочу , щоб отримати список всіх файлів в dirтому числі і в dir11, dir12і dir13.

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


Відповіді:


232

-LВаріант lsвиконуватиме то , що ви хочете. Це відмежування символічних посилань.

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

ls -LR

Ви також можете досягти цього за допомогою

find -follow

Цей -followпараметр спрямовує пошук на пошук символьних посилань на каталоги.

На Mac OS X використання

find -L

як -followуже застаріло.


14
-наступний застарілий на користь -L у нових версіях знаходження.
pjz

@pjz: чи існує перехресне посилання на '-наведений застарілий; використовувати -L '? Я дещо на моє значне здивування, я знайшов '-L' та '-H', зазначені в стандарті POSIX / SUS на opengroup.org/onlinepubs/009695399/toc.htm , і навіть більше, на мій подив, немає "-наступніше", тому я відповів на власне запитання.
Джонатан Леффлер

це не спрацювало для мене. спочатку нічого не сталося, потім я спробував -follow- і він сказав, що не можна знайти папкуollow
smatthewenglish

4
У ОС X 10.10 це працює: find -L .- У мене була така ж проблема, що і у @ S.Matthew_English
fregante

Ваша відповідь хороша, але я хочу followлише до файлових шляхів (повний шлях до файлу), а не до каталогу, як це зробити?
Вікі Дев

116

Як щодо дерева ? tree -lбуде слідувати посиланнями.

Відмова : Я написав цей пакет.


2
Як щодо аркового пакета?
Mr_and_Mrs_D

Це більш інтуїтивний погляд, ніж ls. Його також простіше обклеїти.
dhaupin

46
find /dir -type f -follow -print

-type f означає, що він буде відображати реальні файли (а не символьні посилання)

-follow означає, що він буде слідувати посиланнями на ваш каталог

-print призведе до відображення імен файлів.

Якщо ви хочете відобразити тип ls, ви можете зробити наступне

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

це створює гарніший дисплей, ніж ls -Lпараметр
eusoubrasileiro

10

Використання 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

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

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

Це саме те, що мені було потрібно. Дякую.
Скотт C

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

властивості файлу, на який вказується посилання, а не з самого посилання (якщо тільки це неперервне символічне посилання або знахідка не в змозі дослідити файл, на який вказує посилання). Використання цієї опції означає -noleaf. Якщо згодом ви скористаєтесь опцією -P, -noleaf все ще діятиме. Якщо -L діє і під час пошуку знайде символічне посилання на підкаталог, буде шуканий підкаталог, на який вказує символічне посилання.


2
ls -R -L

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


-1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.