Как удалить все символические ссылки со специальной целью?

С помощью команды:

ls -la * 

Я могу перечислить все мои символические ссылки.

Как удалить все символические ссылки, связанные с специальной папкой?

Например:

В моем каталоге usr/local/bin меня есть следующие записи:

 lrwxrwxrwx 1 root root 50 Apr 22 14:52 allneeded -> /usr/local/texlive/2011/bin/x86_64-linux/allneeded lrwxrwxrwx 1 root root 47 Apr 22 14:52 amstex -> /usr/local/texlive/2011/bin/x86_64-linux/amstex lrwxrwxrwx 1 root root 24 Apr 23 19:09 arara -> /home/marco/.arara/arara 

Теперь я хочу удалить все ссылки с помощью пути /usr/local/texlive/

3 Solutions collect form web for “Как удалить все символические ссылки со специальной целью?”

Вы можете использовать это, чтобы удалить все символические ссылки:

 find -type l -delete 

с современными версиями find .

В старых версиях поиска это может быть:

 find -type l -exec rm {} \; # or find -type l -exec unlink {} \; 

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

  find -type l | while IFS= read -r lnkname; do if [ "$(readlink '$lnkname')" == "/your/exact/path" ]; then rm -- "$lnkname"; fi; done 

или красиво отформатирован

  find -type l | while IFS= read -r lnkname; do if [ "$(readlink '$lnkname')" = "/your/exact/path" ]; then rm -- "$lnkname" fi done 

Конечно, if бы, возможно, было включено более сложное условие, такое как сопоставление шаблона с grep .


Специально для вашего случая:

 find -type l | while IFS= read -r lnk; do if (readlink "$lnk" | grep -q '^/usr/local/texlive/'); then rm "$lnk"; fi; done 

или красиво отформатирован:

 find -type l | while IFS= read -r lnk do if readlink "$lnk" | grep -q '^/usr/local/texlive/' then rm "$lnk" fi done 

С современной find которая поддерживает -lname :

 find /usr/local/bin -lname '/usr/local/texlive/*' -delete 

должен это сделать.

Решение find отлично.

На всякий случай, если ваш поиск не поддерживает -lname , вот еще один способ, который использует только shell и readlink .

 cd /usr/local/bin for f in *; do case "$(readlink "$f")" in /usr/local/texlive/*) rm "$f" ;; esac done 
  • Трейлинг слэш на символических ссылках на каталоги
  • ld не может найти существующую библиотеку
  • Символическая ссылка на файл jar и службу init.d
  • Исправлена ​​ошибка с файловой системой rsync "Только для чтения (30)"
  • nemo: Контекстное меню Действие Запуск сценария, который заставляет выбранную символическую ссылку быть относительной
  • symlinking на `.rbenv /`: сколько слишком много?
  • Жесткие ссылки по сравнению с символическими ссылками: какой из них быстрее / меньше?
  • Выполнить команду, которая возвращает строку при чтении файла
  • Как заставить создать символическую ссылку?
  • rsync: как перенести абсолютные символические ссылки?
  • Записывает ли `ln -sf` существующие файлы, которые являются только символическими ссылками
  • Interesting Posts

    Отключение замены только для одного процесса с помощью групп?

    Получение Tightvnc Server, работающего на Debian 8 (с KDE)

    Grub возвращает Файл не найден при загрузке на новый диск с Debian Jessie

    Получить идентификатор и установленное местоположение USB

    Пропустить «естественный» выход в ловушку

    Изменение моего каталога по умолчанию в passwd меняет мое приглашение

    Что происходит после загрузки образа ядра Linux в оперативную память

    Как работает файловая структура Linux?

    Как перенаправить вывод из файла в stdout?

    Как сделать команду vim автоматически запущенной с помощью .vimrc?

    Как я могу автоматизировать эту ручную задачу поиска определенного процесса предка из заданного pid или команды?

    Как обновить «командный кеш» после смены ссылок?

    Часы, оборудование и загрузка

    Проблема с доступом к .so-библиотекам

    Почему конвейер не работает для команды файла?

    Linux и Unix - лучшая ОС в мире.