Как найти все символические ссылки в PWD, которые ссылаются на файлы вне PWD?Юникс - PullRequest
2 голосов
/ 25 февраля 2012

Я могу найти все ссылки в каталоге по команде:

find . -type l

Но мне нужна ссылка, которая относится только к файлам за пределами PWD. Кто-нибудь может сказать, как это сделать? Спасибо.

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Ich сделал бы что-то вроде:

for link in `find . -type l`; do X=$(dirname `readlink $link`); if [ $X != '.' ]; then echo $link; fi ; done
1 голос
/ 25 февраля 2012

Я бы сделал что-то вроде:

find . -type l -exec readlink -f '{}' \; | grep -v "^`readlink -f ${PWD}`"

readlink -f дает вам канонический путь файла, поэтому первая команда дает вам путь ссылок, а команда grep исключает файлы, начинающиеся с текущего пути.

Если вы хотите запомнить, какие ссылки указывали на эти пути, вот способ сделать это:

find . -type l -exec sh -c 'echo $(readlink -f "{}") "<-- {}"' \; \
  | grep -v "^$(readlink -f ${PWD})"

Переключатель -exec более сложный, поскольку вам необходимо отобразить как связанный путь, так и путь символической ссылки.

...