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