Як знайти усі м'які посилання (символічні посилання) у поточному каталозі?


10

Питання стосується сценаріїв оболонок у Росії bash.

Як перевірити сценарій, які файли в поточному каталозі є м'якими посиланнями?

У випадку, якщо я використав неправильний термін, коли говорю м'які посилання , я маю на увазі файли, створені за допомогою ln -s.

Єдине, що мені вдалося придумати, - це оцінити ls -laяк вираз і проаналізувати його результати, але очевидно, це не найкраще рішення.


1
Їх називають "символічними посиланнями" (на відміну від "жорстких посилань").
Призупинено до подальшого повідомлення.

Райтто, я знав, що, мабуть, помилився термін, дякую за голову вгору
bguiz

М'яке посилання також добре, але з пробілом. :-) ( en.wikipedia.org/wiki/Symbolic_link )
Ар'ян

Відповіді:



14

Можливо, вам не дуже потрібен сценарій. Щоб показати будь-які символічні посилання лише у поточній папці, не повторюючись у жодній дочірній папці:

знайти. -maxdepth 1 -тип l -принт

Або, щоб отримати додаткову інформацію, скористайтеся одним із:

знайти. -maxdepth 1 -тип l -exec ls -ld {} +
знайти. -maxdepth 1 -тип l -принт0 | xargs -0 ls -ld

Щоб сказати, чи є файл символічним посиланням, можна скористатися readlink, що нічого не виведе, якщо це не символічне посилання. Наступний приклад не зовсім корисний, але показує, як readlinkігнорує звичайні файли та папки. Скористайтеся одним із:

знайти. -maxdepth 1 -exec readlink {} +
знайти. -maxdepth 1 -принт0 | xargs -0 readlink

Зауважимо, що вищесказане -exec ... +і xargs ...набагато швидше, ніж -exec ... \;. Подібно до:

time find / usr / bin -maxdepth 1 -тип l -exec ls -ld {} \;
реальні 0м0.372с
користувач 0m0.087s
sys 0m0.163s

час пошуку / usr / bin -maxdepth 1 -тип l -exec ls -ld {} +
реальні 0м0.013с
користувач 0m0.004s
sys 0m0.008s

час пошуку / usr / bin -maxdepth 1 -тип l -принт0 | xargs -0 ls -ld
реальні 0м0.012с
користувач 0m0.004s
sys 0m0.009s

Мені подобалася відповідь Полсі, все-таки +1 для вас, оскільки мені може знадобитися зробити це поза скриптом оболонки якогось дня.
bguiz

1
Вам не обов'язково потрібні xargs. Ви можете просто скористатися знахідкою. -maxdepth 1 -exec readlink {} \;
стиб

Правда, @stib, але xargsце набагато швидше на моєму Mac; дивись мою редакцію. Але я дізнався що - щось нове сьогодні: є також +замість \;(Хоча деякі стверджують , що це має / мав проблеми з grep.)
Арьян
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.