Как найти все символические ссылки, указывающие на любой файл/каталог внутри заданного каталога

disown - это встроенная функция bash (управление заданиями), как и switch , continue и history . Таким образом, вы не найдете его ни в одном списке пакетов, не только в AplineLinux. Я не уверен, является ли disown новой функцией (отсутствующей в старых версиях) или необязательной. . В Ubuntu версия bash - v4.3.46, но она доступна.

Для чего-то еще вы должны перейти к поиску по содержимому пакета .

14
23.05.2017, 14:33
3 ответа

В моем случае принятый ответ был бесполезен (, потому что он не выдавал источник ссылки ). Вот что сработало для меня.

Я работал над этим, используя два -execпункта:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"
16
27.01.2020, 19:51

Сzsh:

print -rC1 /dir2/**/*(ND@e['[[ $REPLY:P = /dir1(/*|) ]]'])

Сломанный:

  • print -rC1:печатает свои аргументы raw в колонке 1C. Здесь аргументы будут сгенерированы из следующего глобуса. Замените на ls -ld, чтобы получить больше информации о каждой символической ссылке¹
  • **/:любой уровень подкаталогов (рекурсивная подстановка)
  • *:файл с любым именем (, состоящим из любого количества символов, хотя zsh *, как и в большинстве оболочек, также допускает не -символы ).
  • (...):квалификаторы glob для уточнения соответствия по другим критериям, а не только по имени файла
  • N:enable nullglobдля этого одного глобуса (не произойдет сбой, если совпадений нет, просто передайте пустой список в print, который ничего не напечатает ).
  • D:включитьdotglob:также учитывать скрытые файлы.
  • @:ограничить файлы типа символической ссылкой .
  • e['code']:выберите файлы, для которых codeпринимает значение true. Внутри codeрассматриваемый файл хранится в $REPLY.
  • $REPLY:P:получает абсолютный и канонический (свободный от символической ссылки )путь к файлу (аналогично тому, что делает стандартная функция realpath()).
  • [[ string = pattern ]]возвращает true, если строка соответствует шаблону (из ksh ).
  • /dir1(/*|), так как шаблон соответствует только /dir1или /dir1/, за которым следует что-либо.

¹ с оговоркой, что если нет подходящего файла, будет указан текущий рабочий каталог. Для lsбыло бы лучше удалить квалификатор Nglob

.
3
27.01.2020, 19:51

В зависимости от ваших обстоятельств вы можете удалить каталог, а затем удалить все полученные недействительные символические ссылки со следующим:

find -xtype l -delete

Тест xtype возвращает 'l', если символическая ссылка не работает.

0
16.09.2020, 20:19

Теги

Похожие вопросы