Как найти все софт-ссылки (символьные ссылки) в текущем каталоге?

вопрос касается shell-скриптов в bash.

Как проверить с помощью скрипта какие файлы в текущем каталоге мягкие ссылки?

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

единственное, что мне удалось придумать, это оценить ls -la как выражение, и разобрать его результаты, но очевидно, что это не лучшее решение.

30
задан Arjan
14.05.2023 3:33 Количество просмотров материала 3671
Распечатать страницу

2 ответа

See 'УСЛОВНЫЕ ВЫРАЖЕНИЯ' in man bash – в этом случае требуется -h:

for file in *
do
  if [ -h "$file" ]; then
    echo "$file"
  fi
done
14
отвечен Polsy 2023-05-15 11:21

возможно, Вам не нужен сценарий. Чтобы показать любые символьные ссылки только в текущей папке, не рекурсивно в любую дочернюю папку:

find . -maxdepth 1 -type l -print

или, чтобы получить дополнительную информацию, используйте один из:

find . -maxdepth 1 -type l -exec ls -ld {} +
find . -maxdepth 1 -type l -print0 | xargs -0 ls -ld

рассказать if файл-это символьная ссылка, можно использовать readlink, который ничего не выводит, если это не символьная ссылка. Следующий пример не совсем полезен, но показывает как readlink игнорирует обычные файлы и папки. Использовать один of:

find . -maxdepth 1 -exec readlink {} +
find . -maxdepth 1 -print0 | xargs -0 readlink

обратите внимание, что выше -exec ... + и xargs ... гораздо быстрее, чем -exec ... \;. Like:

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
14
отвечен Arjan 2023-05-15 13:38

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх