Как найти все программные ссылки (символические ссылки) в текущем каталоге?
Вопрос касается shell-скриптинга в bash
,
Как проверить с помощью скрипта, какие файлы в текущем каталоге являются программными ссылками?
Если я использовал неправильный термин, когда я говорю мягкие ссылки, я имею в виду файлы, созданные с использованием ln -s
,
Единственное, что мне удалось придумать, - это оценить ls -la
в качестве выражения, и проанализировать его результаты, но, очевидно, это не лучшее решение.
2 ответа
Смотрите "УСЛОВНЫЕ ВЫРАЖЕНИЯ" в man bash
- в этом случае вы хотите -h
:
for file in *
do
if [ -h "$file" ]; then
echo "$file"
fi
done
Возможно, вам не нужен сценарий. Чтобы показать любые символические ссылки только в текущей папке, не возвращаясь ни в одну дочернюю папку:
находить. -maxdepth 1-type l -print
Или, чтобы получить больше информации, используйте один из:
находить. -maxdepth 1 -тип l -exec ls -ld {} + находить. -maxdepth 1 -type l -print0 | xargs -0 ls -ld
Чтобы определить, является ли файл символической ссылкой, можно использовать readlink
, который ничего не выдаст, если это не символическая ссылка. Следующий пример не совсем полезен, но показывает, как readlink
игнорирует нормальные файлы и папки. Используйте один из:
находить. -maxdepth 1 -exec readlink {} + находить. -maxdepth 1 -print0 | xargs -0 readlink
Обратите внимание, что выше -exec ... +
а также xargs ...
намного быстрее чем -exec ... \;
, Подобно:
time find /usr/bin -maxdepth 1 -type l -exec ls -ld {} \; реальный 0m0,372s пользователь 0m0.087s sys 0m0.163s time find /usr/bin -maxdepth 1 -type l -exec ls -ld {} + реальный 0m0.013s пользователь 0m0.004s sys 0m0.008s время найти /usr/bin -maxdepth 1 -тип l -print0 | xargs -0 ls -ld реальный 0m0.012s пользователь 0m0.004s sys 0m0.009s