Смотрите «УСЛОВНЫЕ ВЫРАЖЕНИЯ» в man bash
- в этом случае вы хотите -h
:
for file in * do if [ -h "$file" ]; then echo "$file" fi done
Вопрос касается shell-скриптинга в bash
.
Как проверить с помощью скрипта, какие файлы в текущем каталоге являются программными ссылками?
В случае, если я использовал неправильный термин, когда я говорю мягкие ссылки, я имею в виду файлы, созданные с использованием ln -s
.
Единственное, что мне удалось придумать, - это оценить ls -la
как выражение и проанализировать его результаты, но, очевидно, это не лучшее решение.
Смотрите «УСЛОВНЫЕ ВЫРАЖЕНИЯ» в 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